Index: /trunk/src/VBox/Additions/linux/installer/vboxadd.sh
===================================================================
--- /trunk/src/VBox/Additions/linux/installer/vboxadd.sh	(revision 86647)
+++ /trunk/src/VBox/Additions/linux/installer/vboxadd.sh	(revision 86648)
@@ -356,5 +356,5 @@
         echo "KERNEL=${udev_fix}\"vboxuser\", NAME=\"vboxuser\", OWNER=\"vboxadd\", MODE=\"0666\"" >> /etc/udev/rules.d/60-vboxadd.rules
         # Make sure the new rule is noticed.
-        udevadm control --reload >/dev/null 2>&1 || true
+        udevadm control --reload-rules >/dev/null 2>&1 || true
         udevcontrol reload_rules >/dev/null 2>&1 || true
     fi
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp	(revision 86647)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp	(revision 86648)
@@ -1113,4 +1113,8 @@
                         case VirtualSystemDescriptionType_CloudPublicSSHKey:
                         case VirtualSystemDescriptionType_BootingFirmware:
+                        case VirtualSystemDescriptionType_CloudInstanceMetadata:
+                        case VirtualSystemDescriptionType_CloudInstanceFreeFormTags:
+                        case VirtualSystemDescriptionType_CloudImageFreeFormTags:
+
                             /** @todo  VirtualSystemDescriptionType_Miscellaneous? */
                             break;
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageCloud.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageCloud.cpp	(revision 86647)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageCloud.cpp	(revision 86648)
@@ -123,10 +123,4 @@
     int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
     AssertRCReturn(vrc, RTEXITCODE_FAILURE);
-    if (a->argc == iFirst)
-    {
-        RTPrintf("Empty command parameter list, show help.\n");
-        printHelp(g_pStdOut);
-        return RTEXITCODE_SUCCESS;
-    }
 
     Utf8Str strCompartmentId;
@@ -295,10 +289,4 @@
     int vrc = RTGetOptInit(&GetState, a->argc, a->argv, s_aOptions, RT_ELEMENTS(s_aOptions), iFirst, 0);
     AssertRCReturn(vrc, RTEXITCODE_FAILURE);
-    if (a->argc == iFirst)
-    {
-        RTPrintf("Empty command parameter list, show help.\n");
-        printHelp(g_pStdOut);
-        return RTEXITCODE_SUCCESS;
-    }
 
     Utf8Str strCompartmentId;
@@ -542,4 +530,5 @@
 
     Utf8Str strDisplayName, strImageId, strBootVolumeId, strPublicSSHKey;
+    bool fKeyPresented = false;
     int c;
     while ((c = RTGetOpt(&GetState, &ValueUnion)) != 0)
@@ -603,4 +592,5 @@
                 pVSD->AddDescription(VirtualSystemDescriptionType_CloudPublicSSHKey,
                                      Bstr(ValueUnion.psz).raw(), NULL);
+                fKeyPresented = true;
                 break;
             case 1001:
@@ -620,6 +610,10 @@
         return RTEXITCODE_FAILURE;
 
-    if (strPublicSSHKey.isEmpty())
-        RTPrintf("Warning!!! Public SSH key doesn't present in the passed arguments...\n");
+    if ( fKeyPresented )
+        if (strPublicSSHKey.isEmpty())
+            RTPrintf("Warning!!! The value of the passed public SSH key is empty...\n");
+    else
+        return errorArgument("Parameter --public-ssh-key is absent. if there is no need to pass a key just use the form"
+                             " '--public-ssh-key='.");
 
     if (strImageId.isNotEmpty() && strBootVolumeId.isNotEmpty())
@@ -787,5 +781,5 @@
     };
 
-    const size_t vsdHReadableArraySize = 12;//the number of items in the vsdHReadableArray
+    const size_t vsdHReadableArraySize = 14;//the number of items in the vsdHReadableArray
     vsdHReadable vsdHReadableArray[vsdHReadableArraySize] = {
         {VirtualSystemDescriptionType_CloudDomain, "Availability domain = %ls\n", "Availability domain wasn't found\n"},
@@ -802,5 +796,8 @@
         {VirtualSystemDescriptionType_CPU, "CPUs = %ls\n", "Numbers of CPUs weren't found\n"},
         {VirtualSystemDescriptionType_CloudPublicIP, "Instance public IP = %ls\n", "Public IP wasn't found\n"},
-        {VirtualSystemDescriptionType_Miscellaneous, "%ls\n", "Free-form tags or metadata weren't found\n"}
+        {VirtualSystemDescriptionType_CloudInstanceMetadata, "%ls\n", "Metadata weren't found\n"},
+        {VirtualSystemDescriptionType_CloudInstanceFreeFormTags, "%ls\n", "Instance free-form tags weren't found\n"},
+        {VirtualSystemDescriptionType_CloudImageFreeFormTags, "%ls\n", "Image free-form tags weren't found\n"}
+
     };
 
Index: /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp	(revision 86647)
+++ /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp	(revision 86648)
@@ -363,4 +363,19 @@
                 }
 #endif
+                break;
+            }
+
+            case VBoxEventType_OnProgressPercentageChanged:
+            {
+                ComPtr<IProgressPercentageChangedEvent> pV = aEvent;
+                Assert(pV);
+                LONG percent = 0;
+                pV->COMGETTER(Percent)(&percent);
+                {
+                    LogRel(("VBoxSDLEventListener: got the percent %d from the event "
+                            "VBoxEventType_OnProgressPercentageChanged.\n", percent));
+                    RTPrintf("VBoxSDLEventListener: got the percent %d from the event "
+                             "VBoxEventType_OnProgressPercentageChanged.\n", percent);
+                }
                 break;
             }
@@ -597,4 +612,19 @@
                 }
 #endif /* !RT_OS_DARWIN */
+                break;
+            }
+
+            case VBoxEventType_OnProgressPercentageChanged:
+            {
+                ComPtr<IProgressPercentageChangedEvent> pV = aEvent;
+                Assert(pV);
+                LONG percent = 0;
+                pV->COMGETTER(Percent)(&percent);
+                {
+                    LogRel(("VBoxSDLConsoleEventListener: got the percent %d from the event "
+                            "VBoxEventType_OnProgressPercentageChanged.\n", percent));
+                    RTPrintf("VBoxSDLConsoleEventListener: got the percent %d from the event "
+                             "VBoxEventType_OnProgressPercentageChanged.\n", percent);
+                }
                 break;
             }
@@ -2108,4 +2138,6 @@
         com::SafeArray<VBoxEventType_T> eventTypes;
         eventTypes.push_back(VBoxEventType_OnExtraDataChanged);
+
+        eventTypes.push_back(VBoxEventType_OnProgressPercentageChanged);
         CHECK_ERROR(pES, RegisterListener(pVBoxListener, ComSafeArrayAsInParam(eventTypes), true));
     }
@@ -2125,4 +2157,5 @@
         eventTypes.push_back(VBoxEventType_OnCanShowWindow);
         eventTypes.push_back(VBoxEventType_OnShowWindow);
+        eventTypes.push_back(VBoxEventType_OnProgressPercentageChanged);
         CHECK_ERROR(pES, RegisterListener(pConsoleListener, ComSafeArrayAsInParam(eventTypes), true));
         // until we've tried to to start the VM, ignore power off events
@@ -2372,5 +2405,5 @@
                     case SDL_USER_EVENT_XPCOM_EVENTQUEUE:
                     {
-                        LogFlow(("SDL_USER_EVENT_XPCOM_EVENTQUEUE: processing XPCOM event queue...\n"));
+//                      LogFlow(("SDL_USER_EVENT_XPCOM_EVENTQUEUE: processing XPCOM event queue...\n"));
                         eventQ->processEventQueue(0);
                         signalXPCOMEventQueueThread();
Index: /trunk/src/VBox/GuestHost/OpenGL/.scm-settings
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/.scm-settings	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/.scm-settings	(revision 86648)
@@ -0,0 +1,49 @@
+# $Id$
+## @file
+# Source code massager settings for the OpenGL guest/host code.
+#
+
+#
+# Copyright (C) 2017-2019 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# The basic config here is external copyright, however there are lots of exceptions
+/*.h:                                      --external-copyright --no-convert-tabs --no-strip-trailing-blanks --no-fix-header-guards
+/include/cr_blitter.h:                     --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_compositor.h:                  --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_dump.h:                        --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_glext.h:                       --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_htable.h:                      --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_sortarray.h:                   --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_vreg.h:                        --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/state/cr_framebuffer.h:           --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/state/cr_glsl.h:                  --no-external-copyright --convert-tabs --strip-trailing-blanks
+/state_tracker/state_bits_globalop.h:      --no-external-copyright --convert-tabs --strip-trailing-blanks
+
+
+/*.c:                                      --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/packer/pack_framebuffer.c:                --no-external-copyright --convert-tabs --strip-trailing-blanks
+/packer/pack_shaders.c:                    --no-external-copyright --convert-tabs --strip-trailing-blanks
+/packer/pack_visibleregion.c:              --no-external-copyright --convert-tabs --strip-trailing-blanks
+/state_tracker/state_framebuffer.c:        --no-external-copyright --convert-tabs --strip-trailing-blanks
+/state_tracker/state_glsl.c:               --no-external-copyright --convert-tabs --strip-trailing-blanks
+/state_tracker/state_snapshot.c:           --no-external-copyright --convert-tabs --strip-trailing-blanks
+/util/error.c:                             --no-external-copyright --convert-tabs --strip-trailing-blanks
+/util/vboxhgcm.c:                          --no-external-copyright --convert-tabs --strip-trailing-blanks
+/util/vboxhgsmi.c:                         --no-external-copyright --convert-tabs --strip-trailing-blanks
+
+/*.def:                                    --external-copyright
+/*.py:                                     --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+
+--filter-out-files *_special
+--filter-out-files /LICENSE
+--filter-out-files *.txt
+
Index: /trunk/src/VBox/GuestHost/OpenGL/LICENSE
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/LICENSE	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/LICENSE	(revision 86648)
@@ -0,0 +1,32 @@
+Copyright (c) 2002, Stanford University
+All rights reserved.
+
+Some portions of Chromium are copyrighted by individual organizations.
+Please see the files COPYRIGHT.LLNL and COPYRIGHT.REDHAT for more
+information.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of Stanford University nor the names of its contributors
+  may be used to endorse or promote products derived from this software
+  without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
Index: /trunk/src/VBox/GuestHost/OpenGL/Makefile.kmk
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/Makefile.kmk	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/Makefile.kmk	(revision 86648)
@@ -0,0 +1,57 @@
+# $Id$
+## @file
+# Sub-Makefile for the VirtualBox Guest/Host OpenGL part
+#
+
+#
+# Copyright (C) 2008-2019 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+SUB_DEPTH = ../../../..
+include $(KBUILD_PATH)/subheader.kmk
+
+
+#
+# Target lists.
+#
+BLDDIRS += \
+	$(VBOX_PATH_CROGL_GENFILES)/ \
+	$(VBOX_PATH_CROGL_GENFILES)/state/
+
+#
+# Generate files for WDDM driver which are still used.
+#
+$(VBOX_PATH_CROGL_GENFILES)/cr_packfunctions.h: $(PATH_SUB_CURRENT)/packer/pack_header.py $(PATH_SUB_CURRENT)/packer/packer_special $(VBOX_CROGL_API_FILES) | $$(dir $$@)
+	$(call MSG_GENERATE,python,$@,$<)
+	$(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) $(<D)
+
+$(VBOX_PATH_CROGL_GENFILES)/cr_opcodes.h: $(PATH_SUB_CURRENT)/packer/opcodes.py $(VBOX_CROGL_API_FILES) | $$(dir $$@)
+	$(call MSG_GENERATE,python,$@,$<)
+	$(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI)
+
+$(VBOX_PATH_CROGL_GENFILES)/state/cr_currentpointers.h: $(PATH_SUB_CURRENT)/packer/pack_currentheader.py $(PATH_SUB_CURRENT)/packer/pack_currenttypes.py | $$(dir $(VBOX_PATH_CROGL_GENFILES)) $$(dir $$@)
+	$(call MSG_GENERATE,python,$@,$<)
+	$(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $<
+
+$(VBOX_PATH_CROGL_GENFILES)/packer.c: $(PATH_SUB_CURRENT)/packer/packer.py $(PATH_SUB_CURRENT)/packer/packer_special $(VBOX_CROGL_API_FILES) | $$(dir $$@)
+	$(call MSG_GENERATE,python,$@,$<)
+	$(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) $(<D)
+
+$(VBOX_PATH_CROGL_GENFILES)/pack_bbox.c: $(PATH_SUB_CURRENT)/packer/packer_bbox.py | $$(dir $$@)
+	$(call MSG_GENERATE,python,$@,$<)
+	$(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI)
+
+$(VBOX_PATH_CROGL_GENFILES)/pack_current.c: $(PATH_SUB_CURRENT)/packer/pack_current.py $(PATH_SUB_CURRENT)/packer/pack_currenttypes.py | $$(dir $$@)
+	$(call MSG_GENERATE,python,$@,$<)
+	$(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $<
+
+include $(FILE_KBUILD_SUB_FOOTER)
+
Index: /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/APIspec.txt
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/APIspec.txt	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/APIspec.txt	(revision 86648)
@@ -0,0 +1,10531 @@
+
+# Adapted from Mesa.
+# Python scripts read this file and generate various C files.
+
+# Possible lines:
+#  name     Name of the function (without "gl" prefix).  Required.
+#
+#  return   Datatype of returned value, or void.  Required.
+#
+#  param    Zero or more of these lines may be present.  Each describes a
+#           function parameter.  Two fields follow: parameter name and the
+#           parameter type (which may be several tokens like "const GLvoid *").
+#
+#  vector   Used to indicate how may elements are referenced by pointer params.
+#           Two fields follow:  the parameter name (previously defined by a
+#           'param' line) and a number indicating how may elements are
+#           referenced by the vector.  If the number is unknown, don't use
+#           a vector line.  Example for glGetClipPlane:
+#                vector  equation  4
+#
+#  category May be 1.x to indicate that the function belongs to OpenGL
+#           version 1.x.  Or may be the name of an extension such as
+#           GL_ARB_multitexture.  Required.
+#
+#  alias    Indicates that this function is just an alias for a previously
+#           defined function.
+#
+#  vectoralias  The function is the vector version of the named function.
+#
+#  props    An optional list of properties for this function.  Possible
+#           properties include:
+#             nolist    - the function is not compiled into dlists.
+#             get       - the function is a state-getter (implies nolist).
+#             setclient - the function sets client-side state (implies nolist).
+#             useclient - the function uses client-side state.
+#             pervertex - the function sets per-vertex state (i.e. Normal,
+#                         Color, Material, EdgeFlag).
+#             render    - the function is a rendering command.
+#             pixelstore - uses glPixelStore settings
+#           In general, functions without any props are state-setters.
+#
+#  chromium An optional list of properties for Chromium.  Possible properties
+#           include:
+#             pack      - this command can be packed/unpacked.
+#             extpack   - this command can be packed/unpacked, extended opcode.
+#             expandpack - this command can be packed (i.e. a packer function
+#                         exists), but has no opcode of its own: it is
+#                         expanded into other opcodes when packed.
+#             nopack    - this command is not packed. (XXX not needed)
+#             stub      - don't actually implement, just a stub for now.
+#             omit      - totally omit this function.
+#             checklist - function may or may not be compiled into display
+#                         lists, depending on parameter values.
+#         serverdependent - the function sets or queries state whose
+#                         ultimate value is known only by the server;
+#                         queries typically require pack/writeback to
+#                         be correct (although crState simulations may
+#                         suffice), and state-changing functions cannot
+#                         effectively cache the state locally
+#
+# Chromium packertest properties:
+#
+# Packertest  generates the permuted parameter lists for a GL function.
+# A definition in APUutil.txt looks like this:
+#
+#     name            ColorMaterial
+#     return          void
+#     param           face            GLenum
+#     paramprop       face            GL_FRONT GL_BACK GL_FRONT_AND_BACK
+#     param           mode            GLenum
+#     paramprop       mode            GL_EMISSION GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_AMBIENT_AND_DIFFUSE
+#     category        1.0
+#     chromium        pack
+#
+#  paramaction An optional list of action names for the Chromium packertest program. 
+#       specfied by     paramaction  argument    property name
+#`      Possible property names include
+#           makeStripeImage -
+#           enableTex   -
+#           genTex      -
+#           pixelStore  -
+#
+#  paramprop An optional list of properties for this function. The properties correspond to 
+#       a list of GLenums for arguments that are of type GLenum
+#   example:
+#   param           face            GLenum
+#   paramprop       face            GL_FRONT GL_BACK GL_FRONT_AND_BACK
+#   param           mode            GLenum
+#   paramprop       mode            GL_EMISSION GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_AMBIENT_AND_DIFFUSE
+#   After permuting all of the arguments the function we get:
+#
+#   ('GL_FRONT', 'GL_EMISSION')
+#   ('GL_BACK', 'GL_EMISSION')
+#   ('GL_FRONT_AND_BACK', 'GL_EMISSION')
+#   ('GL_FRONT', 'GL_AMBIENT')
+#   ('GL_BACK', 'GL_AMBIENT')
+#   ('GL_FRONT_AND_BACK', 'GL_AMBIENT')
+#   ('GL_FRONT', 'GL_DIFFUSE')
+#   ('GL_BACK', 'GL_DIFFUSE')
+#   ('GL_FRONT_AND_BACK', 'GL_DIFFUSE')
+#   ('GL_FRONT', 'GL_SPECULAR')
+#   ('GL_BACK', 'GL_SPECULAR')
+#   ('GL_FRONT_AND_BACK', 'GL_SPECULAR')
+#   ('GL_FRONT', 'GL_AMBIENT_AND_DIFFUSE')
+#   ('GL_BACK', 'GL_AMBIENT_AND_DIFFUSE')
+#   ('GL_FRONT_AND_BACK', 'GL_AMBIENT_AND_DIFFUSE')
+#
+#  paramlist An optional list of properties for a function for non GLenums
+#   The values are used in the generation of the permuted arguments.
+#   If paramlist is not used, a single default (specified in packertest.py)
+#   is used instead.
+#
+#   example:
+#   param         s               GLdouble
+#   paramlist     s               0 .5 1
+#   
+#
+#  paramset An optional list of properties for arguments of type GLenum.
+#
+#   Used when generating multiple sets of permuted arguments of type GLenum .
+#
+#   paramset    [format type] [GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA] [GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT]
+#   paramset    [format type] [GL_RGB] [GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV]
+#   paramset    [format type]  [GL_RGBA GL_BGRA] [GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV]
+#
+#  paramvec  An optional property used for functions with vector arguments
+#       The specification is similar to that of paramlist.
+#
+#   example:
+#   param         v               const GLbyte *
+#   paramvec      v               2 2 2
+#   vector        v               3
+#
+#
+
+
+# OpenGL 1.0
+
+name        NewList
+return      void
+param       list        GLuint
+param       mode        GLenum
+paramprop   mode        GL_COMPILE GL_COMPILE_AND_EXECUTE
+category    1.0
+props       nolist
+chromium    extpack
+
+name        EndList
+return      void
+category    1.0
+props       nolist
+chromium    extpack
+
+name        CallList
+return      void
+param       list        GLuint
+category    1.0
+chromium    pack
+props       render
+
+name        CallLists
+return      void
+param       n       GLsizei
+param       type        GLenum
+paramprop   type        GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_2_BYTES GL_3_BYTES GL_4_BYTES
+param       lists       const GLvoid *
+category    1.0
+chromium    pack
+props       render
+
+name        DeleteLists
+return      void
+param       list        GLuint
+param       range       GLsizei
+category    1.0
+props       nolist
+chromium    extpack
+
+name        GenLists
+return      GLuint
+param       range       GLsizei
+category    1.0
+props       get
+chromium    extpack serverdependent
+
+name        ListBase
+return      void
+param       base        GLuint
+category    1.0
+chromium    extpack
+
+name        Begin
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP GL_POLYGON
+category    1.0
+props       pervertex render
+chromium    pack
+
+name        Bitmap
+return      void
+param       width       GLsizei
+paramlist   width       8
+param       height      GLsizei
+paramlist   height      8
+param       xorig       GLfloat
+paramlist   xorig       0.0
+param       yorig       GLfloat
+paramlist   yorig       0.0
+param       xmove       GLfloat
+paramlist   xmove       0.0
+param       ymove       GLfloat
+paramlist   ymove       0.0
+param       bitmap      const GLubyte *
+paramaction bitmap      makeStripeImage
+category    1.0
+props       render pixelstore
+chromium    pack
+
+name        Color3b
+return      void
+param       red     GLbyte
+param       green       GLbyte
+param       blue        GLbyte
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color3bv
+return      void
+param       v       const GLbyte *
+paramvec    v       1 2 3
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Color3b
+
+name        Color3d
+return      void
+param       red     GLdouble
+param       green       GLdouble
+param       blue        GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color3dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1 2 3
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Color3d
+
+name        Color3f
+return      void
+param       red     GLfloat
+param       green       GLfloat
+param       blue        GLfloat
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color3fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1 2 3
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Color3f
+
+name        Color3i
+return      void
+param       red     GLint
+param       green       GLint
+param       blue        GLint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color3iv
+return      void
+param       v       const GLint *
+paramvec    v       1 2 3
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Color3i
+
+name        Color3s
+return      void
+param       red     GLshort
+param       green       GLshort
+param       blue        GLshort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color3sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 2 3
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Color3s
+
+name        Color3ub
+return      void
+param       red     GLubyte
+param       green       GLubyte
+param       blue        GLubyte
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color3ubv
+return      void
+param       v       const GLubyte *
+paramvec    v       1 2 3
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Color3ub
+
+name        Color3ui
+return      void
+param       red     GLuint
+param       green       GLuint
+param       blue        GLuint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color3uiv
+return      void
+param       v       const GLuint *
+paramvec    v       1 2 3
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Color3ui
+
+name        Color3us
+return      void
+param       red     GLushort
+param       green       GLushort
+param       blue        GLushort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color3usv
+return      void
+param       v       const GLushort *
+paramvec    v       1 2 3
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Color3us
+
+name        Color4b
+return      void
+param       red     GLbyte
+param       green       GLbyte
+param       blue        GLbyte
+param       alpha       GLbyte
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color4bv
+return      void
+param       v       const GLbyte *
+paramvec    v       1 2 3 4
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Color4b
+
+name        Color4d
+return      void
+param       red     GLdouble
+param       green       GLdouble
+param       blue        GLdouble
+param       alpha       GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color4dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1 2 3 4
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Color4d
+
+name        Color4f
+return      void
+param       red     GLfloat
+param       green       GLfloat
+param       blue        GLfloat
+param       alpha       GLfloat
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color4fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1 2 3 4
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Color4f
+
+name        Color4i
+return      void
+param       red     GLint
+param       green       GLint
+param       blue        GLint
+param       alpha       GLint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color4iv
+return      void
+param       v       const GLint *
+paramvec    v       1 2 3 4
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Color4i
+
+name        Color4s
+return      void
+param       red     GLshort
+param       green       GLshort
+param       blue        GLshort
+param       alpha       GLshort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color4sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 2 3 4
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Color4s
+
+name        Color4ub
+return      void
+param       red     GLubyte
+param       green       GLubyte
+param       blue        GLubyte
+param       alpha       GLubyte
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color4ubv
+return      void
+param       v       const GLubyte *
+paramvec    v       1 2 3 4
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Color4ub
+
+name        Color4ui
+return      void
+param       red     GLuint
+param       green       GLuint
+param       blue        GLuint
+param       alpha       GLuint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color4uiv
+return      void
+param       v       const GLuint *
+paramvec    v       1 2 3 4
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Color4ui
+
+name        Color4us
+return      void
+param       red     GLushort
+param       green       GLushort
+param       blue        GLushort
+param       alpha       GLushort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Color4usv
+return      void
+param       v       const GLushort *
+paramvec    v       1 2 3 4
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Color4us
+
+name        EdgeFlag
+return      void
+param       flag        GLboolean
+category    1.0
+props       pervertex
+chromium    pack
+
+name        EdgeFlagv
+return      void
+param       flag        const GLboolean *
+paramvec    flag        GL_TRUE
+vector      flag        1
+category    1.0
+props       pervertex
+vectoralias EdgeFlag
+
+name        End
+return      void
+category    1.0
+props       pervertex render
+chromium    pack
+
+name        Indexd
+return      void
+param       c       GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Indexdv
+return      void
+param       c       const GLdouble *
+paramvec    c       1.0
+vector      c       1
+category    1.0
+props       pervertex
+vectoralias Indexd
+
+name        Indexf
+return      void
+param       c       GLfloat
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Indexfv
+return      void
+param       c       const GLfloat *
+paramvec    c       1.0
+vector      c       1
+category    1.0
+props       pervertex
+vectoralias Indexf
+
+name        Indexi
+return      void
+param       c       GLint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Indexiv
+return      void
+param       c       const GLint *
+paramvec    c       1
+vector      c       1
+category    1.0
+props       pervertex
+vectoralias Indexi
+
+name        Indexs
+return      void
+param       c       GLshort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Indexsv
+return      void
+param       c       const GLshort *
+paramvec    c       1
+vector      c       1
+category    1.0
+props       pervertex
+vectoralias Indexs
+
+name        Normal3b
+return      void
+param       nx      GLbyte
+param       ny      GLbyte
+param       nz      GLbyte
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Normal3bv
+return      void
+param       v       const GLbyte *
+paramvec    v       1 1 1
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Normal3b
+
+name        Normal3d
+return      void
+param       nx      GLdouble
+param       ny      GLdouble
+param       nz      GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Normal3dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Normal3d
+
+name        Normal3f
+return      void
+param       nx      GLfloat
+param       ny      GLfloat
+param       nz      GLfloat
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Normal3fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Normal3f
+
+name        Normal3i
+return      void
+param       nx      GLint
+param       ny      GLint
+param       nz      GLint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Normal3iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1 1
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Normal3i
+
+name        Normal3s
+return      void
+param       nx      GLshort
+param       ny      GLshort
+param       nz      GLshort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Normal3sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1 1
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Normal3s
+
+name        RasterPos2d
+return      void
+param       x       GLdouble
+param       y       GLdouble
+category    1.0
+chromium    pack
+
+name        RasterPos2dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0
+vector      v       2
+category    1.0
+vectoralias RasterPos2d
+
+name        RasterPos2f
+return      void
+param       x       GLfloat
+param       y       GLfloat
+category    1.0
+chromium    pack
+
+name        RasterPos2fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0
+vector      v       2
+category    1.0
+vectoralias RasterPos2f
+
+name        RasterPos2i
+return      void
+param       x       GLint
+param       y       GLint
+category    1.0
+chromium    pack
+
+name        RasterPos2iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1
+vector      v       2
+category    1.0
+vectoralias RasterPos2i
+
+name        RasterPos2s
+return      void
+param       x       GLshort
+param       y       GLshort
+category    1.0
+chromium    pack
+
+name        RasterPos2sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1
+vector      v       2
+category    1.0
+vectoralias RasterPos2s
+
+name        RasterPos3d
+return      void
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+category    1.0
+chromium    pack
+
+name        RasterPos3dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    1.0
+vectoralias RasterPos3d
+
+name        RasterPos3f
+return      void
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+category    1.0
+chromium    pack
+
+name        RasterPos3fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    1.0
+vectoralias RasterPos3f
+
+name        RasterPos3i
+return      void
+param       x       GLint
+param       y       GLint
+param       z       GLint
+category    1.0
+chromium    pack
+
+name        RasterPos3iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1 1
+vector      v       3
+category    1.0
+vectoralias RasterPos3i
+
+name        RasterPos3s
+return      void
+param       x       GLshort
+param       y       GLshort
+param       z       GLshort
+category    1.0
+chromium    pack
+
+name        RasterPos3sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1 1
+vector      v       3
+category    1.0
+vectoralias RasterPos3s
+
+name        RasterPos4d
+return      void
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+param       w       GLdouble
+category    1.0
+chromium    pack
+
+name        RasterPos4dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0 1.0
+vector      v       4
+category    1.0
+vectoralias RasterPos4d
+
+name        RasterPos4f
+return      void
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+param       w       GLfloat
+category    1.0
+chromium    pack
+
+name        RasterPos4fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0 1.0 1.0
+vector      v       4
+category    1.0
+vectoralias RasterPos4f
+
+name        RasterPos4i
+return      void
+param       x       GLint
+param       y       GLint
+param       z       GLint
+param       w       GLint
+category    1.0
+chromium    pack
+
+name        RasterPos4iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1 1 1
+vector      v       4
+category    1.0
+vectoralias RasterPos4i
+
+name        RasterPos4s
+return      void
+param       x       GLshort
+param       y       GLshort
+param       z       GLshort
+param       w       GLshort
+category    1.0
+chromium    pack
+
+name        RasterPos4sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1 1 1
+vector      v       4
+category    1.0
+vectoralias RasterPos4s
+
+name        Rectd
+return      void
+param       x1      GLdouble
+param       y1      GLdouble
+param       x2      GLdouble
+param       y2      GLdouble
+category    1.0
+props       render
+chromium    pack
+
+name        Rectdv
+return      void
+param       v1      const GLdouble *
+paramvec    v1      1.0 1.0
+param       v2      const GLdouble *
+paramvec    v2      1.0 1.0
+vector      v1      2
+vector      v2      2
+category    1.0
+props       render
+vectoralias Rectd
+
+name        Rectf
+return      void
+param       x1      GLfloat
+param       y1      GLfloat
+param       x2      GLfloat
+param       y2      GLfloat
+category    1.0
+props       render
+chromium    pack
+
+name        Rectfv
+return      void
+param       v1      const GLfloat *
+paramvec    v1      1.0 1.0
+param       v2      const GLfloat *
+paramvec    v2      1.0 1.0
+vector      v1      2
+vector      v2      2
+category    1.0
+props       render
+vectoralias Rectf
+
+name        Recti
+return      void
+param       x1      GLint
+param       y1      GLint
+param       x2      GLint
+param       y2      GLint
+category    1.0
+props       render
+chromium    pack
+
+name        Rectiv
+return      void
+param       v1      const GLint *
+paramvec    v1      1 1
+param       v2      const GLint *
+paramvec    v2      1 1
+vector      v1      2
+vector      v2      2
+category    1.0
+props       render
+vectoralias Recti
+
+name        Rects
+return      void
+param       x1      GLshort
+param       y1      GLshort
+param       x2      GLshort
+param       y2      GLshort
+category    1.0
+props       render
+chromium    pack
+
+name        Rectsv
+return      void
+param       v1      const GLshort *
+paramvec    v1      1 1
+param       v2      const GLshort *
+paramvec    v2      1 1
+vector      v1      2
+vector      v2      2
+category    1.0
+props       render
+vectoralias Rects
+
+name        TexCoord1d
+return      void
+param       s       GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord1dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0
+vector      v       1
+category    1.0
+props       pervertex
+vectoralias TexCoord1d
+
+name        TexCoord1f
+return      void
+param       s       GLfloat
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord1fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0
+vector      v       1
+category    1.0
+props       pervertex
+vectoralias TexCoord1f
+
+name        TexCoord1i
+return      void
+param       s       GLint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord1iv
+return      void
+param       v       const GLint *
+paramvec    v       1
+vector      v       1
+category    1.0
+props       pervertex
+vectoralias TexCoord1i
+
+name        TexCoord1s
+return      void
+param       s       GLshort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord1sv
+return      void
+param       v       const GLshort *
+paramvec    v       1
+vector      v       1
+category    1.0
+props       pervertex
+vectoralias TexCoord1s
+
+name        TexCoord2d
+return      void
+param       s       GLdouble
+param       t       GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord2dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0
+vector      v       2
+category    1.0
+props       pervertex
+vectoralias TexCoord2d
+
+name        TexCoord2f
+return      void
+param       s       GLfloat
+param       t       GLfloat
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord2fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0
+vector      v       2
+category    1.0
+props       pervertex
+vectoralias TexCoord2f
+
+name        TexCoord2i
+return      void
+param       s       GLint
+param       t       GLint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord2iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1
+vector      v       2
+category    1.0
+props       pervertex
+vectoralias TexCoord2i
+
+name        TexCoord2s
+return      void
+param       s       GLshort
+param       t       GLshort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord2sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1
+vector      v       2
+category    1.0
+props       pervertex
+vectoralias TexCoord2s
+
+name        TexCoord3d
+return      void
+param       s       GLdouble
+param       t       GLdouble
+param       r       GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord3dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias TexCoord3d
+
+name        TexCoord3f
+return      void
+param       s       GLfloat
+param       t       GLfloat
+param       r       GLfloat
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord3fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias TexCoord3f
+
+name        TexCoord3i
+return      void
+param       s       GLint
+param       t       GLint
+param       r       GLint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord3iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1 1
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias TexCoord3i
+
+name        TexCoord3s
+return      void
+param       s       GLshort
+param       t       GLshort
+param       r       GLshort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord3sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1 1
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias TexCoord3s
+
+name        TexCoord4d
+return      void
+param       s       GLdouble
+param       t       GLdouble
+param       r       GLdouble
+param       q       GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord4dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0 1.0
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias TexCoord4d
+
+name        TexCoord4f
+return      void
+param       s       GLfloat
+param       t       GLfloat
+param       r       GLfloat
+param       q       GLfloat
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord4fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0 1.0 1.0
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias TexCoord4f
+
+name        TexCoord4i
+return      void
+param       s       GLint
+param       t       GLint
+param       r       GLint
+param       q       GLint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord4iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1 1 1
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias TexCoord4i
+
+name        TexCoord4s
+return      void
+param       s       GLshort
+param       t       GLshort
+param       r       GLshort
+param       q       GLshort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        TexCoord4sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1 1 1
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias TexCoord4s
+
+name        Vertex2d
+return      void
+param       x       GLdouble
+param       y       GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex2dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0
+vector      v       2
+category    1.0
+props       pervertex
+vectoralias Vertex2d
+
+name        Vertex2f
+return      void
+param       x       GLfloat
+param       y       GLfloat
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex2fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0
+vector      v       2
+category    1.0
+props       pervertex
+vectoralias Vertex2f
+
+name        Vertex2i
+return      void
+param       x       GLint
+param       y       GLint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex2iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1
+vector      v       2
+category    1.0
+props       pervertex
+vectoralias Vertex2i
+
+name        Vertex2s
+return      void
+param       x       GLshort
+param       y       GLshort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex2sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1
+vector      v       2
+category    1.0
+props       pervertex
+vectoralias Vertex2s
+
+name        Vertex3d
+return      void
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex3dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Vertex3d
+
+name        Vertex3f
+return      void
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex3fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Vertex3f
+
+name        Vertex3i
+return      void
+param       x       GLint
+param       y       GLint
+param       z       GLint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex3iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1 1
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Vertex3i
+
+name        Vertex3s
+return      void
+param       x       GLshort
+param       y       GLshort
+param       z       GLshort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex3sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1 1
+vector      v       3
+category    1.0
+props       pervertex
+vectoralias Vertex3s
+
+name        Vertex4d
+return      void
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+param       w       GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex4dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0 1.0
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Vertex4d
+
+name        Vertex4f
+return      void
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+param       w       GLfloat
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex4fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0 1.0 1.0
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Vertex4f
+
+name        Vertex4i
+return      void
+param       x       GLint
+param       y       GLint
+param       z       GLint
+param       w       GLint
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex4iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1 1 1
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Vertex4i
+
+name        Vertex4s
+return      void
+param       x       GLshort
+param       y       GLshort
+param       z       GLshort
+param       w       GLshort
+category    1.0
+props       pervertex
+chromium    pack
+
+name        Vertex4sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1 1 1
+vector      v       4
+category    1.0
+props       pervertex
+vectoralias Vertex4s
+
+name        ClipPlane
+return      void
+param       plane       GLenum
+paramprop   plane       GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5
+param       equation    const GLdouble *
+paramvec    equation    0.0 0.0 0.0 0.0
+vector      equation    4
+category    1.0
+chromium    pack
+
+name        ColorMaterial
+return      void
+param       face        GLenum
+paramprop   face        GL_FRONT GL_BACK GL_FRONT_AND_BACK
+param       mode        GLenum
+paramprop   mode        GL_EMISSION GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_AMBIENT_AND_DIFFUSE
+category    1.0
+chromium    pack
+
+name        CullFace
+return      void
+param       mode        GLenum
+paramprop   mode        GL_FRONT GL_BACK GL_FRONT_AND_BACK
+category    1.0
+chromium    pack
+
+#
+# Can't test for <param> GL_EYE_RADIAL_NV GL_EYE_PLANE GL_EYE_PLANE_ABSOLUTE_NV - NV_fog_distance
+# Can't test for <param> GL_FOG_COORDINATE_EXT GL_FRAGMENT_DEPTH_EXT - EXT_fog_coord
+name        Fogf
+return      void
+param       pname       GLenum
+param       param       GLfloat
+paramset    [ pname param ] [ GL_FOG_DISTANCE_MODE_NV ] [ GL_EYE_RADIAL_NV GL_EYE_PLANE GL_EYE_PLANE_ABSOLUTE_NV ]
+paramset    [ pname param ] [ GL_FOG_DENSITY GL_FOG_START GL_FOG_END GL_FOG_INDEX ] [ 1 ]
+category    1.0
+chromium    pack
+
+# Can't test for <param> GL_EYE_RADIAL_NV GL_EYE_PLANE GL_EYE_PLANE_ABSOLUTE_NV - NV_fog_distance
+# Can't test for <param> GL_FOG_COORDINATE_EXT GL_FRAGMENT_DEPTH_EXT - EXT_fog_coord
+# 
+name        Fogfv
+return      void
+param       pname       GLenum
+paramprop   pname       GL_FOG_MODE GL_FOG_DENSITY GL_FOG_START GL_FOG_END GL_FOG_INDEX GL_FOG_COLOR
+param       params      const GLfloat *
+paramvec    params      GL_LINEAR
+category    1.0
+chromium    pack
+
+# Can't test for <param> GL_EYE_RADIAL_NV GL_EYE_PLANE GL_EYE_PLANE_ABSOLUTE_NV - NV_fog_distance
+# Can't test for <param> GL_FOG_COORDINATE_EXT GL_FRAGMENT_DEPTH_EXT - EXT_fog_coord
+name        Fogi
+return      void
+param       pname       GLenum
+param       param       GLint
+paramset    [ pname param ] [ GL_FOG_DISTANCE_MODE_NV ] [ GL_EYE_RADIAL_NV GL_EYE_PLANE GL_EYE_PLANE_ABSOLUTE_NV ]
+paramset    [ pname param ] [ GL_FOG_DENSITY GL_FOG_START GL_FOG_END GL_FOG_INDEX ] [ 1 ]
+category    1.0
+chromium    pack
+
+# Can't test for <param> GL_EYE_RADIAL_NV GL_EYE_PLANE GL_EYE_PLANE_ABSOLUTE_NV - NV_fog_distance
+# Can't test for <param> GL_FOG_COORDINATE_EXT GL_FRAGMENT_DEPTH_EXT - EXT_fog_coord
+name        Fogiv
+return      void
+param       pname       GLenum
+paramprop   pname       GL_FOG_MODE GL_FOG_DENSITY GL_FOG_START GL_FOG_END GL_FOG_INDEX GL_FOG_COLOR
+param       params      const GLint *
+paramvec    params      GL_LINEAR
+category    1.0
+chromium    pack
+
+name        FrontFace
+return      void
+param       mode        GLenum
+paramprop   mode        GL_CW GL_CCW
+category    1.0
+chromium    pack
+
+name        Hint
+return      void
+param       target      GLenum
+paramprop   target      GL_FOG_HINT GL_LINE_SMOOTH_HINT GL_PERSPECTIVE_CORRECTION_HINT GL_POINT_SMOOTH_HINT GL_POLYGON_SMOOTH_HINT GL_TEXTURE_COMPRESSION_HINT_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_GENERATE_MIPMAP_HINT_SGIS
+param       mode        GLenum
+paramprop   mode        GL_FASTEST GL_NICEST GL_DONT_CARE
+category    1.0
+chromium    extpack
+
+name        Lightf
+return      void
+param       light       GLenum
+paramprop   light       GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7
+param       pname       GLenum
+paramprop   pname       GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION
+param       param       GLfloat
+paramlist   param       0.0
+category    1.0
+chromium    pack
+
+name        Lightfv
+return      void
+param       light       GLenum
+paramprop   light       GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7
+param       pname       GLenum
+paramprop   pname       GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION GL_SPOT_CUTOFF GL_SPOT_DIRECTION GL_SPOT_EXPONENT GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION
+param       params      const GLfloat *
+paramvec    params      0.0 1.0 1.0 0.0
+category    1.0
+chromium    pack
+
+name        Lighti
+return      void
+param       light       GLenum
+paramprop   light       GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7
+param       pname       GLenum
+paramprop   pname       GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION
+param       param       GLint
+paramlist   param       0.0
+category    1.0
+chromium    pack
+
+name        Lightiv
+return      void
+param       light       GLenum
+paramprop   light       GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7
+param       pname       GLenum
+paramprop   pname       GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION GL_SPOT_CUTOFF GL_SPOT_DIRECTION GL_SPOT_EXPONENT GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION
+param       params      const GLint *
+paramvec    params      0 1 1 0
+category    1.0
+chromium    pack
+
+name        LightModelf
+return      void
+param       pname       GLenum
+param       param       GLfloat
+paramset    [ pname param ] [ GL_LIGHT_MODEL_COLOR_CONTROL_EXT ] [ GL_SINGLE_COLOR_EXT GL_SEPARATE_SPECULAR_COLOR_EXT ]
+paramset    [ pname param ] [ GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_TWO_SIDE ] [ 1.0 ]
+category    1.0
+chromium    pack
+
+name        LightModelfv
+return      void
+param       pname       GLenum
+paramprop   pname       GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE
+param       params      const GLfloat *
+category    1.0
+paramvec    params      0.0 1.0 1.0 0.0
+chromium    pack
+
+name        LightModeli
+return      void
+param       pname       GLenum
+param       param       GLint
+paramset    [ pname param ] [ GL_LIGHT_MODEL_COLOR_CONTROL_EXT ] [ GL_SINGLE_COLOR_EXT GL_SEPARATE_SPECULAR_COLOR_EXT ]
+paramset    [ pname param ] [ GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_TWO_SIDE ] [ 1.0 ] 
+category    1.0
+chromium    pack
+
+name        LightModeliv
+return      void
+param       pname       GLenum
+paramprop   pname       GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE
+param       params      const GLint *
+paramvec    params      0 1 1 0
+category    1.0
+chromium    pack
+
+name        LineStipple
+return      void
+param       factor      GLint
+param       pattern     GLushort
+category    1.0
+chromium    pack
+
+name        LineWidth
+return      void
+param       width       GLfloat
+category    1.0
+chromium    pack
+
+name        Materialf
+return      void
+param       face        GLenum
+paramprop   face        GL_FRONT GL_BACK GL_FRONT_AND_BACK
+param       pname       GLenum
+paramprop   pname       GL_SHININESS
+param       param       GLfloat
+paramlist   param       1.0
+props       pervertex
+category    1.0
+chromium    pack
+
+name        Materialfv
+return      void
+param       face        GLenum
+paramprop   face        GL_FRONT GL_BACK GL_FRONT_AND_BACK
+param       pname       GLenum
+paramprop   pname       GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_EMISSION GL_SHININESS GL_AMBIENT_AND_DIFFUSE GL_COLOR_INDEXES
+param       params      const GLfloat *
+paramvec    params      0.8 0.8 0.5 0.1
+props       pervertex
+category    1.0
+chromium    pack
+
+name        Materiali
+return      void
+param       face        GLenum
+paramprop   face        GL_FRONT GL_BACK GL_FRONT_AND_BACK
+param       pname       GLenum
+paramprop   pname       GL_SHININESS
+param       param       GLint
+paramlist   param       1
+props       pervertex
+category    1.0
+chromium    pack
+
+name        Materialiv
+return      void
+param       face        GLenum
+paramprop   face        GL_FRONT GL_BACK GL_FRONT_AND_BACK
+param       pname       GLenum
+paramprop   pname       GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_EMISSION GL_SHININESS GL_AMBIENT_AND_DIFFUSE GL_COLOR_INDEXES
+param       params      const GLint *
+paramvec    params      1 0 1 0
+props       pervertex
+category    1.0
+chromium    pack
+
+name        PointSize
+return      void
+param       size        GLfloat
+category    1.0
+chromium    pack
+
+name        PolygonMode
+return      void
+param       face        GLenum
+paramprop   face        GL_FRONT GL_BACK GL_FRONT_AND_BACK
+param       mode        GLenum
+paramprop   mode        GL_POINT GL_LINE GL_FILL
+category    1.0
+chromium    pack
+
+name        PolygonStipple
+return      void
+param       mask        const GLubyte *
+vector      mask        128
+category    1.0
+chromium    pack
+
+name        Scissor
+return      void
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+param       height      GLsizei
+category    1.0
+chromium    pack
+
+name        ShadeModel
+return      void
+param       mode        GLenum
+paramprop   mode        GL_FLAT GL_SMOOTH
+category    1.0
+chromium    pack
+
+name        TexParameterf
+return      void
+param       target      GLenum
+param       pname       GLenum
+param       param       GLfloat
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_TEXTURE_MIN_FILTER ] [ GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_LINEAR_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR ]
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_TEXTURE_MAG_FILTER ] [ GL_NEAREST GL_LINEAR ]
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_TEXTURE_COMPARE_MODE_ARB ] [ GL_COMPARE_R_TO_TEXTURE_ARB ]
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_WRAP_R ] [ GL_CLAMP GL_CLAMP_TO_EDGE GL_REPEAT GL_CLAMP_TO_BORDER_ARB GL_MIRRORED_REPEAT_ARB ]
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_GENERATE_MIPMAP_SGIS ] [ GL_TRUE GL_FALSE ]
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_DEPTH_TEXTURE_MODE_ARB ] [ GL_ALPHA GL_LUMINANCE GL_INTENSITY ]
+category    1.0
+chromium    nopack
+
+#
+# certain cases for texture_border_clamp_ARB have been left out
+#
+name        TexParameterfv
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D
+param       pname       GLenum
+paramprop   pname       GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_LOD GL_TEXTURE_MAX_LOD GL_TEXTURE_BASE_LEVEL GL_TEXTURE_MAX_LEVEL GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_WRAP_R GL_TEXTURE_PRIORITY GL_TEXTURE_COMPARE_FUNC_ARB GL_TEXTURE_COMPARE_MODE_ARB
+param       params      const GLfloat *
+category    1.0
+chromium    pack
+vectoralias TexParameterf
+
+name        TexParameteri
+return      void
+param       target      GLenum
+param       pname       GLenum
+param       param       GLint
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_TEXTURE_MIN_FILTER ] [ GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_LINEAR_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR ]
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_TEXTURE_MAG_FILTER ] [ GL_NEAREST GL_LINEAR ]
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_TEXTURE_COMPARE_MODE_ARB ] [ GL_COMPARE_R_TO_TEXTURE_ARB ]
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_WRAP_R ] [ GL_CLAMP GL_CLAMP_TO_EDGE GL_REPEAT GL_CLAMP_TO_BORDER_ARB GL_MIRRORED_REPEAT_ARB ]
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_GENERATE_MIPMAP_SGIS ] [ GL_TRUE GL_FALSE ]
+paramset    [ target pname param ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_DEPTH_TEXTURE_MODE_ARB ] [ GL_ALPHA GL_LUMINANCE GL_INTENSITY ]
+category    1.0
+chromium    nopack
+
+#
+# certain cases for texture_border_clamp_ARB have been left out
+#
+name        TexParameteriv
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D
+param       pname       GLenum
+paramprop   pname       GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_LOD GL_TEXTURE_MAX_LOD GL_TEXTURE_BASE_LEVEL GL_TEXTURE_MAX_LEVEL GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_WRAP_R GL_TEXTURE_PRIORITY GL_TEXTURE_COMPARE_FUNC_ARB GL_TEXTURE_COMPARE_MODE_ARB
+param       params      const GLint *
+category    1.0
+chromium    pack
+vectoralias TexParameteri
+
+# internalFormat is an int but has many options
+name        TexImage1D
+return      void
+param       target      GLenum
+param       level       GLint
+paramlist   level       0
+param       internalFormat  GLint
+paramlist   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_RGB GL_R3_G3_B2 GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16 GL_COMPRESSED_ALPHA_ARB GL_COMPRESSED_LUMINANCE_ARB GL_COMPRESSED_LUMINANCE_ALPHA_ARB GL_COMPRESSED_INTENSITY_ARB GL_COMPRESSED_RGB_ARB GL_COMPRESSED_RGBA_ARB RGBA32F_ARB RGB32F_ARB ALPHA32F_ARB INTENSITY32F_ARB LUMINANCE32F_ARB LUMINANCE_ALPHA32F_ARB RGBA16F_ARB RGB16F_ARB ALPHA16F_ARB INTENSITY16F_ARB LUMINANCE16F_ARB LUMINANCE_ALPHA16F_ARB
+param       width       GLsizei
+paramlist   width       2
+param       border      GLint
+paramlist   border      0
+param       format      GLenum
+param       type        GLenum
+paramset    [ target format type ]  [ GL_TEXTURE_1D ] [ GL_STENCIL_INDEX GL_COLOR_INDEX ] [ GL_BITMAP GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ]  [ GL_TEXTURE_1D ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ]  [ GL_TEXTURE_1D ] [ GL_RGB GL_BGR ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+paramset    [ target format type ]  [ GL_TEXTURE_1D ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels      const GLvoid *
+paramaction pixels      makeStripeImage
+category    1.0
+props       pixelstore
+chromium    pack checklist
+
+
+# paramset  [ target format type ]  [ GL_TEXTURE_2D GL_TEXTURE_RECTANGLE_NV ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+# paramset  [ target format type ] [ GL_TEXTURE_2D GL_TEXTURE_RECTANGLE_NV ] [ GL_RGB ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+# paramset  [ target format type ]  [ GL_TEXTURE_2D GL_TEXTURE_RECTANGLE_NV ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+
+name        TexImage2D
+return      void
+param       target      GLenum
+param       level       GLint
+paramlist   level       0
+param       internalFormat  GLint
+paramlist   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16 GL_COMPRESSED_ALPHA_ARB GL_COMPRESSED_LUMINANCE_ARB GL_COMPRESSED_LUMINANCE_ALPHA_ARB GL_COMPRESSED_INTENSITY_ARB GL_COMPRESSED_RGB_ARB GL_COMPRESSED_RGBA_ARB RGBA32F_ARB RGB32F_ARB ALPHA32F_ARB INTENSITY32F_ARB LUMINANCE32F_ARB LUMINANCE_ALPHA32F_ARB RGBA16F_ARB RGB16F_ARB ALPHA16F_ARB INTENSITY16F_ARB LUMINANCE16F_ARB LUMINANCE_ALPHA16F_ARB
+param       width       GLsizei
+paramlist   width       8
+param       height      GLsizei
+paramlist   height      8
+param       border      GLint
+paramlist   border      0
+param       format      GLenum
+param       type        GLenum
+paramset    [ target format type ]  [ GL_TEXTURE_2D ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ] [ GL_TEXTURE_2D ] [ GL_RGB ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+paramset    [ target format type ]  [ GL_TEXTURE_2D ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels      const GLvoid *
+paramaction pixels      makeStripeImage
+category    1.0
+props       pixelstore
+chromium    pack checklist
+
+# another special case
+
+name        TexEnvf
+return      void
+param       target      GLenum
+param       pname       GLenum
+paramset    [ target pname ] [ GL_TEXTURE_ENV ] [ GL_TEXTURE_ENV_MODE ]
+paramset    [ target pname ] [ GL_POINT_SPRITE_ARB ] [ GL_COORD_REPLACE_ARB ]
+paramset    [ target pname ] [ GL_COMBINE_RGB_EXT ] [ GL_DOT3_RGB_EXT GL_DOT3_RGBA_EXT ]
+paramset    [ target pname ] [ GL_TEXTURE_FILTER_CONTROL_EXT ] [ GL_TEXTURE_LOD_BIAS_EXT ]
+param       param       GLfloat
+paramlist   param       GL_MODULATE GL_DECAL GL_BLEND GL_REPLACE GL_ADD 
+category    1.0
+chromium    nopack
+
+name        TexEnvfv
+return      void
+param       target      GLenum
+param       pname       GLenum
+paramset    [ target pname ] [ GL_TEXTURE_ENV ] [ GL_TEXTURE_ENV_MODE ]
+paramset    [ target pname ] [ GL_POINT_SPRITE_ARB ] [ GL_COORD_REPLACE_ARB ]
+paramset    [ target pname ] [ GL_COMBINE_RGB_EXT ] [ GL_DOT3_RGB_EXT GL_DOT3_RGBA_EXT ]
+paramset    [ target pname ] [ GL_TEXTURE_FILTER_CONTROL_EXT ] [ GL_TEXTURE_LOD_BIAS_EXT ]
+param       params      const GLfloat *
+paramvec    params      0.0 0.0 0.0 0.0
+category    1.0
+chromium    pack
+vectoralias TexEnvf
+
+# another special case
+
+name        TexEnvi
+return      void
+param       target      GLenum
+param       pname       GLenum
+paramset    [ target pname ] [ GL_TEXTURE_ENV ] [ GL_TEXTURE_ENV_MODE ]
+paramset    [ target pname ] [ GL_POINT_SPRITE_ARB ] [ GL_COORD_REPLACE_ARB ]
+paramset    [ target pname ] [ GL_COMBINE_RGB_EXT ] [ GL_DOT3_RGB_EXT GL_DOT3_RGBA_EXT ]
+paramset    [ target pname ] [ GL_TEXTURE_FILTER_CONTROL_EXT ] [ GL_TEXTURE_LOD_BIAS_EXT ]
+param       param       GLint
+paramlist   param       GL_MODULATE GL_DECAL GL_BLEND GL_REPLACE GL_ADD 
+category    1.0
+chromium    nopack
+
+name        TexEnviv
+return      void
+param       target      GLenum
+param       pname       GLenum
+paramset    [ target pname ] [ GL_TEXTURE_ENV ] [ GL_TEXTURE_ENV_MODE ]
+paramset    [ target pname ] [ GL_POINT_SPRITE_ARB ] [ GL_COORD_REPLACE_ARB ]
+paramset    [ target pname ] [ GL_COMBINE_RGB_EXT ] [ GL_DOT3_RGB_EXT GL_DOT3_RGBA_EXT ]
+paramset    [ target pname ] [ GL_TEXTURE_FILTER_CONTROL_EXT ] [ GL_TEXTURE_LOD_BIAS_EXT ]
+param       params      const GLint *
+paramvec    params      0 0 0 0
+category    1.0
+chromium    pack
+vectoralias TexEnvi
+
+name        TexGend
+return      void
+param       coord       GLenum
+param       pname       GLenum
+param       param       GLdouble
+paramset    [ coord pname param ] [ GL_S GL_T ] [ GL_TEXTURE_GEN_MODE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP GL_NORMAL_MAP_NV GL_REFLECTION_MAP_NV ]
+paramset    [ coord pname param ] [ GL_Q GL_R ] [ GL_TEXTURE_GEN_MODE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR GL_NORMAL_MAP_NV GL_REFLECTION_MAP_NV ]
+category    1.0
+chromium    nopack
+
+name        TexGendv
+return      void
+param       coord       GLenum
+param       pname       GLenum
+paramset    [ coord pname params ] [ GL_S GL_T ] [ GL_TEXTURE_GEN_MODE GL_OBJECT_PLANE GL_EYE_PLANE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP ]
+paramset    [ coord pname params ] [ GL_Q GL_R ] [ GL_TEXTURE_GEN_MODE GL_OBJECT_PLANE GL_EYE_PLANE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR ]
+param       params      const GLdouble *
+category    1.0
+chromium    pack
+vectoralias TexGend
+
+name        TexGenf
+return      void
+param       coord       GLenum
+param       pname       GLenum
+param       param       GLfloat
+paramset    [ coord pname param ] [ GL_S GL_T ] [ GL_TEXTURE_GEN_MODE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP GL_NORMAL_MAP_NV GL_REFLECTION_MAP_NV ]
+paramset    [ coord pname param ] [ GL_Q GL_R ] [ GL_TEXTURE_GEN_MODE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR GL_NORMAL_MAP_NV GL_REFLECTION_MAP_NV ]
+category    1.0
+chromium    nopack
+
+name        TexGenfv
+return      void
+param       coord       GLenum
+param       pname       GLenum
+param       params      const GLfloat *
+paramset    [ coord pname params ] [ GL_S GL_T ] [ GL_TEXTURE_GEN_MODE GL_OBJECT_PLANE GL_EYE_PLANE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP ]
+paramset    [ coord pname params ] [ GL_Q GL_R ] [ GL_TEXTURE_GEN_MODE GL_OBJECT_PLANE GL_EYE_PLANE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR ]
+category    1.0
+chromium    pack
+vectoralias TexGenf
+
+name        TexGeni
+return      void
+param       coord       GLenum
+param       pname       GLenum
+param       param       GLint
+paramset    [ coord pname param ] [ GL_S GL_T ] [ GL_TEXTURE_GEN_MODE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP GL_NORMAL_MAP_NV GL_REFLECTION_MAP_NV ]
+paramset    [ coord pname param ] [ GL_Q GL_R ] [ GL_TEXTURE_GEN_MODE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR GL_NORMAL_MAP_NV GL_REFLECTION_MAP_NV ]
+category    1.0
+chromium    nopack
+
+name        TexGeniv
+return      void
+param       coord       GLenum
+param       pname       GLenum
+param       params      const GLint *
+paramset    [ coord pname params ] [ GL_S GL_T ] [ GL_TEXTURE_GEN_MODE GL_OBJECT_PLANE GL_EYE_PLANE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP ]
+paramset    [ coord pname params ] [ GL_Q GL_R ] [ GL_TEXTURE_GEN_MODE GL_OBJECT_PLANE GL_EYE_PLANE ] [ GL_OBJECT_LINEAR GL_EYE_LINEAR ]
+category    1.0
+chromium    pack
+vectoralias TexGeni
+
+name        FeedbackBuffer
+return      void
+param       size        GLsizei
+param       type        GLenum
+paramprop   type        GL_2D GL_3D GL_3D_COLOR GL_3D_COLOR_TEXTURE GL_4D_COLOR_TEXTURE
+param       buffer      GLfloat *
+category    1.0
+props       nolist
+chromium    pack
+
+name        SelectBuffer
+return      void
+param       size        GLsizei
+param       buffer      GLuint *
+category    1.0
+props       nolist
+chromium    pack
+
+name        RenderMode
+return      GLint
+param       mode        GLenum
+paramprop   mode        GL_RENDER GL_SELECT GL_FEEDBACK
+category    1.0
+props       nolist get
+chromium    extpack
+
+name        InitNames
+return      void
+category    1.0
+chromium    pack
+
+name        LoadName
+return      void
+param       name        GLuint
+category    1.0
+chromium    pack
+
+name        PassThrough
+return      void
+param       token       GLfloat
+category    1.0
+chromium    pack
+
+name        PopName
+return      void
+category    1.0
+chromium    pack
+
+name        PushName
+return      void
+param       name        GLuint
+category    1.0
+chromium    pack
+
+name        DrawBuffer
+return      void
+param       mode        GLenum
+paramprop   mode        GL_NONE GL_FRONT_LEFT GL_FRONT_RIGHT GL_BACK_LEFT GL_BACK_RIGHT GL_FRONT GL_BACK GL_LEFT GL_RIGHT GL_FRONT_AND_BACK GL_AUX0 GL_AUX1 GL_AUX2 GL_AUX3 
+category    1.0
+chromium    extpack
+
+name        Clear
+return      void
+param       mask        GLbitfield
+category    1.0
+props       render
+chromium    pack
+
+name        ClearAccum
+return      void
+param       red     GLfloat
+param       green       GLfloat
+param       blue        GLfloat
+param       alpha       GLfloat
+category    1.0
+chromium    extpack
+
+name        ClearIndex
+return      void
+param       c       GLfloat
+category    1.0
+chromium    extpack
+
+name        ClearColor
+return      void
+param       red     GLclampf
+param       green       GLclampf
+param       blue        GLclampf
+param       alpha       GLclampf
+category    1.0
+chromium    extpack
+
+name        ClearStencil
+return      void
+param       s       GLint
+category    1.0
+chromium    extpack
+
+name        ClearDepth
+return      void
+param       depth       GLclampd
+category    1.0
+chromium    extpack
+
+name        StencilMask
+return      void
+param       mask        GLuint
+category    1.0
+chromium    pack
+
+name        ColorMask
+return      void
+param       red     GLboolean
+param       green       GLboolean
+param       blue        GLboolean
+param       alpha       GLboolean
+category    1.0
+chromium    pack
+
+name        DepthMask
+return      void
+param       flag        GLboolean
+category    1.0
+chromium    pack
+
+name        IndexMask
+return      void
+param       mask        GLuint
+category    1.0
+chromium    pack
+
+name        Accum
+return      void
+param       op      GLenum
+paramprop   op      GL_ACCUM GL_LOAD GL_ADD GL_MULT GL_RETURN
+param       value       GLfloat
+category    1.0
+props       render
+chromium    extpack
+
+name        Disable
+return      void
+param       cap     GLenum
+paramprop   cap     GL_ALPHA_TEST GL_AUTO_NORMAL GL_BLEND GL_COLOR_ARRAY GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_TABLE GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_CULL_FACE GL_DEPTH_TEST GL_DITHER GL_EDGE_FLAG_ARRAY GL_FOG GL_HISTOGRAM GL_INDEX_ARRAY GL_INDEX_LOGIC_OP GL_LIGHTING GL_LINE_SMOOTH GL_LINE_STIPPLE GL_MAP1_COLOR_4 GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP2_COLOR_4 GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MINMAX GL_NORMAL_ARRAY GL_NORMALIZE GL_POINT_SMOOTH GL_POLYGON_SMOOTH GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_STIPPLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_RESCALE_NORMAL GL_SCISSOR_TEST GL_SEPARABLE_2D GL_STENCIL_TEST GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_VERTEX_ARRAY GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_POINT_SPRITE_ARB GL_RASTER_POSITION_UNCLIPPED_IBM GL_PER_STAGE_CONSTANTS_NV GL_COLOR_SUM_EXT GL_TEXTURE_RECTANGLE_NV
+category    1.0
+chromium    pack
+
+name        Enable
+return      void
+param       cap     GLenum
+paramprop   cap     GL_ALPHA_TEST GL_AUTO_NORMAL GL_BLEND GL_COLOR_ARRAY GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_TABLE GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_CULL_FACE GL_DEPTH_TEST GL_DITHER GL_EDGE_FLAG_ARRAY GL_FOG GL_HISTOGRAM GL_INDEX_ARRAY GL_INDEX_LOGIC_OP GL_LIGHTING GL_LINE_SMOOTH GL_LINE_STIPPLE GL_MAP1_COLOR_4 GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP2_COLOR_4 GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MINMAX GL_NORMAL_ARRAY GL_NORMALIZE GL_POINT_SMOOTH GL_POLYGON_SMOOTH GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_STIPPLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_RESCALE_NORMAL GL_SCISSOR_TEST GL_SEPARABLE_2D GL_STENCIL_TEST GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_VERTEX_ARRAY GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_POINT_SPRITE_ARB GL_RASTER_POSITION_UNCLIPPED_IBM GL_PER_STAGE_CONSTANTS_NV GL_COLOR_SUM_EXT GL_TEXTURE_RECTANGLE_NV
+category    1.0
+chromium    pack
+
+name        Finish
+return      void
+category    1.0
+props       nolist
+chromium    pack
+
+name        Flush
+return      void
+category    1.0
+props       nolist
+chromium    pack
+
+name        PopAttrib
+return      void
+category    1.0
+chromium    extpack
+
+# mask GL_MULTISAMPLE_BIT_ARB
+name        PushAttrib
+return      void
+param       mask        GLbitfield
+category    1.0
+chromium    extpack
+
+name        Map1d
+return      void
+param       target      GLenum
+paramprop   target      GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP1_INDEX GL_MAP1_COLOR_4 GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 
+param       u1      GLdouble
+paramlist   u1      0.0
+param       u2      GLdouble
+paramlist   u2      1.0
+param       stride      GLint
+paramlist   stride      4
+param       order       GLint
+paramlist   order       10
+param       points      const GLdouble *
+paramaction points      initMap1
+category    1.0
+chromium    pack
+
+name        Map1f
+return      void
+param       target      GLenum
+paramprop   target      GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP1_INDEX GL_MAP1_COLOR_4 GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 
+param       u1      GLfloat
+paramlist   u1      0.0
+param       u2      GLfloat
+paramlist   u2      1.0
+param       stride      GLint
+paramlist   stride      4
+param       order       GLint
+paramlist   order       10
+param       points      const GLfloat *
+paramaction points      initMap1
+category    1.0
+chromium    pack
+
+name        Map2d
+return      void
+param       target      GLenum
+paramprop   target      GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP2_INDEX GL_MAP2_COLOR_4 GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4
+param       u1      GLdouble
+paramlist   u1      0.0
+param       u2      GLdouble
+paramlist   u2      1.0
+param       ustride     GLint
+paramlist   ustride     8
+param       uorder      GLint
+paramlist   uorder      2
+param       v1      GLdouble
+paramlist   v1      1.0
+param       v2      GLdouble
+paramlist   v2      0.0
+param       vstride     GLint
+paramlist   vstride     4
+param       vorder      GLint
+paramlist   vorder      3
+param       points      const GLdouble *
+paramaction pixel       enableTex
+category    1.0
+chromium    pack
+
+name        Map2f
+return      void
+param       target      GLenum
+paramprop   target      GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP2_INDEX GL_MAP2_COLOR_4 GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4
+param       u1      GLfloat
+paramlist   u1      0.0
+param       u2      GLfloat
+paramlist   u2      1.0
+param       ustride     GLint
+paramlist   ustride     8
+param       uorder      GLint
+paramlist   uorder      2
+param       v1      GLfloat
+paramlist   v1      0.0
+param       v2      GLfloat
+paramlist   v2      1.0
+param       vstride     GLint
+paramlist   vstride     4
+param       vorder      GLint
+paramlist   vorder      3
+param       points      const GLfloat *
+paramaction pixel       enableTex
+category    1.0
+chromium    pack
+
+name        MapGrid1d
+return      void
+param       un      GLint
+paramlist   un      40
+param       u1      GLdouble
+paramlist   u1      0.0
+param       u2      GLdouble
+paramlist   u2      1.0
+category    1.0
+chromium    pack
+
+name        MapGrid1f
+return      void
+param       un      GLint
+paramlist   un      40
+paramlist   u1      0.0
+param       u1      GLfloat
+param       u2      GLfloat
+paramlist   u2      1.0
+category    1.0
+chromium    pack
+
+name        MapGrid2d
+return      void
+param       un      GLint
+paramlist   un      40
+param       u1      GLdouble
+paramlist   u1      0.0
+param       u2      GLdouble
+paramlist   u2      1.0
+param       vn      GLint
+paramlist   vn      40
+param       v1      GLdouble
+paramlist   v1      0.0
+param       v2      GLdouble
+paramlist   v2      1.0
+category    1.0
+chromium    pack
+
+name        MapGrid2f
+return      void
+param       un      GLint
+paramlist   un      40
+param       u1      GLfloat
+paramlist   u1      0.0
+param       u2      GLfloat
+paramlist   u1      0.0
+param       vn      GLint
+paramlist   vn      40
+param       v1      GLfloat
+paramlist   v1      0.0
+param       v2      GLfloat
+paramlist   v2      1.0
+category    1.0
+chromium    pack
+
+name        EvalCoord1d
+return      void
+param       u       GLdouble
+category    1.0
+props       pervertex
+chromium    pack
+
+name        EvalCoord1dv
+return      void
+param       u       const GLdouble *
+paramvec    u       1.0
+vector      u       1
+category    1.0
+props       pervertex
+vectoralias EvalCoord1d
+
+name        EvalCoord1f
+return      void
+param       u       GLfloat
+paramlist   u       1.0
+category    1.0
+props       pervertex
+chromium    pack
+
+name        EvalCoord1fv
+return      void
+param       u       const GLfloat *
+paramvec    u       1.0
+vector      u       1
+category    1.0
+props       pervertex
+vectoralias EvalCoord1f
+
+name        EvalCoord2d
+return      void
+param       u       GLdouble
+paramlist   u       1.0
+param       v       GLdouble
+paramlist   v       1.0
+category    1.0
+props       pervertex
+chromium    pack
+
+name        EvalCoord2dv
+return      void
+param       u       const GLdouble *
+paramvec    u       1.0 1.0
+vector      u       2
+category    1.0
+props       pervertex
+vectoralias EvalCoord2d
+
+name        EvalCoord2f
+return      void
+param       u       GLfloat
+paramlist   u       1.0
+param       v       GLfloat
+paramlist   v       1.0
+category    1.0
+props       pervertex
+chromium    pack
+
+name        EvalCoord2fv
+return      void
+param       u       const GLfloat *
+paramvec    u       1.0 0.0
+vector      u       2
+category    1.0
+props       pervertex
+vectoralias EvalCoord2f
+
+name        EvalMesh1
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINT GL_LINE
+param       i1      GLint
+param       i2      GLint
+category    1.0
+chromium    pack
+props       render
+
+name        EvalPoint1
+return      void
+param       i       GLint
+category    1.0
+chromium    pack
+props       pervertex
+
+name        EvalMesh2
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINT GL_LINE GL_FILL
+param       i1      GLint
+param       i2      GLint
+param       j1      GLint
+param       j2      GLint
+category    1.0
+chromium    pack
+props       render
+
+name        EvalPoint2
+return      void
+param       i       GLint
+param       j       GLint
+category    1.0
+chromium    pack
+props       pervertex
+
+name        AlphaFunc
+return      void
+param       func        GLenum
+paramprop   func        GL_NEVER GL_LESS GL_EQUAL GL_LEQUAL GL_GREATER GL_NOTEQUAL GL_GEQUAL GL_ALWAYS
+param       ref     GLclampf
+category    1.0
+chromium    pack
+
+name        BlendFunc
+return      void
+param       sfactor     GLenum
+paramprop   sfactor     GL_ZERO GL_ONE GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_SRC_ALPHA_SATURATE GL_CONSTANT_COLOR GL_ONE_MINUS_CONSTANT_COLOR GL_CONSTANT_ALPHA GL_ONE_MINUS_CONSTANT_ALPHA
+param       dfactor     GLenum
+paramprop   dfactor     GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_CONSTANT_COLOR GL_ONE_MINUS_CONSTANT_COLOR GL_CONSTANT_ALPHA GL_ONE_MINUS_CONSTANT_ALPHA
+category    1.0
+chromium    pack
+
+name        LogicOp
+return      void
+param       opcode      GLenum
+paramprop   opcode      GL_CLEAR GL_SET GL_COPY GL_COPY_INVERTED GL_NOOP GL_INVERT GL_AND GL_NAND GL_OR GL_NOR GL_XOR GL_EQUIV GL_AND_REVERSE GL_AND_INVERTED GL_OR_REVERSE GL_OR_INVERTED
+category    1.0
+chromium    extpack
+
+name        StencilFunc
+return      void
+param       func        GLenum
+paramprop   func        GL_NEVER GL_LESS GL_LEQUAL GL_GREATER GL_GEQUAL GL_EQUAL GL_NOTEQUAL GL_ALWAYS
+param       ref     GLint
+param       mask        GLuint
+category    1.0
+chromium    pack
+
+name        StencilOp
+return      void
+param       fail        GLenum
+paramprop   fail        GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GL_INCR_WRAP_EXT GL_DECR_WRAP_EXT
+param       zfail       GLenum
+paramprop   zfail       GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GL_INCR_WRAP_EXT GL_DECR_WRAP_EXT
+param       zpass       GLenum
+paramprop   zpass       GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GL_INCR_WRAP_EXT GL_DECR_WRAP_EXT
+category    1.0
+chromium    pack
+
+name        DepthFunc
+return      void
+param       func        GLenum
+paramprop   func        GL_NEVER GL_LESS GL_EQUAL GL_LEQUAL GL_GREATER GL_NOTEQUAL GL_GEQUAL GL_ALWAYS
+category    1.0
+chromium    pack
+
+name        PixelZoom
+return      void
+param       xfactor     GLfloat
+param       yfactor     GLfloat
+category    1.0
+chromium    pack
+
+name        PixelTransferf
+return      void
+param       pname       GLenum
+paramprop   pname       GL_MAP_COLOR GL_MAP_STENCIL GL_INDEX_SHIFT GL_INDEX_OFFSET GL_RED_SCALE GL_RED_BIAS GL_GREEN_SCALE GL_GREEN_BIAS GL_BLUE_SCALE GL_BLUE_BIAS GL_ALPHA_SCALE GL_ALPHA_BIAS GL_DEPTH_SCALE GL_DEPTH_BIAS GL_POST_COLOR_MATRIX_RED_SCALE GL_POST_COLOR_MATRIX_GREEN_SCALE GL_POST_COLOR_MATRIX_BLUE_SCALE GL_POST_COLOR_MATRIX_ALPHA_SCALE GL_POST_COLOR_MATRIX_RED_BIAS GL_POST_COLOR_MATRIX_GREEN_BIAS GL_POST_COLOR_MATRIX_BLUE_BIAS GL_POST_COLOR_MATRIX_ALPHA_BIAS GL_POST_CONVOLUTION_RED_SCALE GL_POST_CONVOLUTION_GREEN_SCALE GL_POST_CONVOLUTION_BLUE_SCALE GL_POST_CONVOLUTION_ALPHA_SCALE GL_POST_CONVOLUTION_RED_BIAS GL_POST_CONVOLUTION_GREEN_BIAS GL_POST_CONVOLUTION_BLUE_BIAS GL_POST_CONVOLUTION_ALPHA_BIAS
+param       param       GLfloat
+category    1.0
+chromium    pack
+
+name        PixelTransferi
+return      void
+param       pname       GLenum
+paramprop   pname       GL_MAP_COLOR GL_MAP_STENCIL GL_INDEX_SHIFT GL_INDEX_OFFSET GL_RED_SCALE GL_RED_BIAS GL_GREEN_SCALE GL_GREEN_BIAS GL_BLUE_SCALE GL_BLUE_BIAS GL_ALPHA_SCALE GL_ALPHA_BIAS GL_DEPTH_SCALE GL_DEPTH_BIAS GL_POST_COLOR_MATRIX_RED_SCALE GL_POST_COLOR_MATRIX_GREEN_SCALE GL_POST_COLOR_MATRIX_BLUE_SCALE GL_POST_COLOR_MATRIX_ALPHA_SCALE GL_POST_COLOR_MATRIX_RED_BIAS GL_POST_COLOR_MATRIX_GREEN_BIAS GL_POST_COLOR_MATRIX_BLUE_BIAS GL_POST_COLOR_MATRIX_ALPHA_BIAS GL_POST_CONVOLUTION_RED_SCALE GL_POST_CONVOLUTION_GREEN_SCALE GL_POST_CONVOLUTION_BLUE_SCALE GL_POST_CONVOLUTION_ALPHA_SCALE GL_POST_CONVOLUTION_RED_BIAS GL_POST_CONVOLUTION_GREEN_BIAS GL_POST_CONVOLUTION_BLUE_BIAS GL_POST_CONVOLUTION_ALPHA_BIAS
+param       param       GLint
+category    1.0
+chromium    pack
+
+name        PixelStoref
+return      void
+param       pname       GLenum
+paramprop   pname       GL_PACK_SWAP_BYTES GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_IMAGE_HEIGHT GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SKIP_IMAGES GL_PACK_ALIGNMENT GL_UNPACK_SWAP_BYTES GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SKIP_IMAGES GL_UNPACK_ALIGNMENT
+param       param       GLfloat
+paramlist   param       1 2 4 8
+category    1.0
+props       setclient
+chromium    pack
+
+name        PixelStorei
+return      void
+param       pname       GLenum
+paramprop   pname       GL_PACK_SWAP_BYTES GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_IMAGE_HEIGHT GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SKIP_IMAGES GL_PACK_ALIGNMENT GL_UNPACK_SWAP_BYTES GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SKIP_IMAGES GL_UNPACK_ALIGNMENT
+param       param       GLint
+paramlist   param       1 2 4 8
+category    1.0
+props       setclient
+chromium    pack
+
+name        PixelMapfv
+return      void
+param       map     GLenum
+paramprop   map     GL_PIXEL_MAP_I_TO_I GL_PIXEL_MAP_S_TO_S GL_PIXEL_MAP_I_TO_R GL_PIXEL_MAP_I_TO_G GL_PIXEL_MAP_I_TO_B GL_PIXEL_MAP_I_TO_A GL_PIXEL_MAP_R_TO_R GL_PIXEL_MAP_G_TO_G GL_PIXEL_MAP_B_TO_B GL_PIXEL_MAP_A_TO_A
+param       mapsize     GLsizei
+paramlist   mapsize     2
+param       values      const GLfloat *
+paramvec    values      1.0 1.0
+category    1.0
+chromium    pack
+
+name        PixelMapuiv
+return      void
+param       map     GLenum
+paramprop   map     GL_PIXEL_MAP_I_TO_I GL_PIXEL_MAP_S_TO_S GL_PIXEL_MAP_I_TO_R GL_PIXEL_MAP_I_TO_G GL_PIXEL_MAP_I_TO_B GL_PIXEL_MAP_I_TO_A GL_PIXEL_MAP_R_TO_R GL_PIXEL_MAP_G_TO_G GL_PIXEL_MAP_B_TO_B GL_PIXEL_MAP_A_TO_A
+param       mapsize     GLsizei
+paramlist   mapsize     2
+param       values      const GLuint *
+paramvec    values      1 1
+category    1.0
+chromium    pack
+
+name        PixelMapusv
+return      void
+param       map     GLenum
+paramprop   map     GL_PIXEL_MAP_I_TO_I GL_PIXEL_MAP_S_TO_S GL_PIXEL_MAP_I_TO_R GL_PIXEL_MAP_I_TO_G GL_PIXEL_MAP_I_TO_B GL_PIXEL_MAP_I_TO_A GL_PIXEL_MAP_R_TO_R GL_PIXEL_MAP_G_TO_G GL_PIXEL_MAP_B_TO_B GL_PIXEL_MAP_A_TO_A
+param       mapsize     GLsizei
+paramlist   mapsize     2
+param       values      const GLushort *
+paramvec    values      1 1
+category    1.0
+chromium    pack
+
+name        ReadBuffer
+return      void
+param       mode        GLenum
+paramprop   mode        GL_NONE GL_FRONT_LEFT GL_FRONT_RIGHT GL_BACK_LEFT GL_BACK_RIGHT GL_FRONT GL_BACK GL_LEFT GL_RIGHT GL_FRONT_AND_BACK GL_AUX0 GL_AUX1 GL_AUX2 GL_AUX3 
+category    1.0
+chromium    extpack
+
+name        CopyPixels
+return      void
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+param       height      GLsizei
+param       type        GLenum
+paramprop   type        GL_COLOR GL_DEPTH GL_STENCIL
+category    1.0
+props       render
+chromium    pack
+
+name        ReadPixels
+return      void
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+param       height      GLsizei
+param       format      GLenum
+param       type        GLenum
+paramset    [ format type ] [ GL_DEPTH_COMPONENT ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ format type ] [ GL_STENCIL_INDEX ] [ GL_UNSIGNED_SHORT GL_UNSIGNED_INT ]
+paramset    [ format type ] [ GL_RGB ] [ GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ format type ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA ] [ GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ format type ] [ GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ format type ] [ GL_COLOR_INDEX ] [ GL_BITMAP ]
+paramset    [ format type ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels      GLvoid *
+category    1.0
+chromium    pack
+props       get pixelstore
+# XXX? props        get
+
+name        DrawPixels
+return      void
+param       width       GLsizei
+paramlist   width       4
+param       height      GLsizei
+paramlist   height      4
+param       format      GLenum
+paramset    [ format type ] [ GL_COLOR_INDEX GL_DEPTH_COMPONENT ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ format type ] [ GL_STENCIL_INDEX ] [ GL_UNSIGNED_SHORT GL_UNSIGNED_INT ]
+paramset    [ format type ] [ GL_RGB ] [ GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ format type ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA ] [ GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ format type ] [ GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ format type ] [ GL_COLOR_INDEX ] [ GL_BITMAP ]
+paramset    [ format type ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       type        GLenum
+param       pixels      const GLvoid *
+paramaction pixels      makeStripeImage
+category    1.0
+props       render pixelstore
+chromium    pack
+
+name        GetBooleanv
+return      void
+param       pname       GLenum
+paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV GL_READ_FRAMEBUFFER_BINDING_EXT GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_ACTIVE_STENCIL_FACE_EXT
+param       params      GLboolean *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetClipPlane
+return      void
+param       plane       GLenum
+paramprop   plane       GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5
+param       equation    GLdouble *
+paramvec    equation    0.0 0.0 0.0 0.0
+vector      equation    4
+category    1.0
+props       get
+chromium    extpack
+
+name        GetDoublev
+return      void
+param       pname       GLenum
+paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV GL_READ_FRAMEBUFFER_BINDING_EXT GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_READ_FRAMEBUFFER_BINDING_EXT GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_ACTIVE_STENCIL_FACE_EXT GL_MAX_DRAW_BUFFERS GL_DRAW_BUFFER0 GL_DRAW_BUFFER1 GL_DRAW_BUFFER2 GL_DRAW_BUFFER3 GL_DRAW_BUFFER4 GL_DRAW_BUFFER5 GL_DRAW_BUFFER6 GL_DRAW_BUFFER7 GL_DRAW_BUFFER8 GL_DRAW_BUFFER9 GL_DRAW_BUFFER10 GL_DRAW_BUFFER11 GL_DRAW_BUFFER12 GL_DRAW_BUFFER13 GL_DRAW_BUFFER14 GL_DRAW_BUFFER15
+param       params      GLdouble *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetError
+return      GLenum
+category    1.0
+props       get
+chromium    extpack
+
+name        GetFloatv
+return      void
+param       pname       GLenum
+paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV GL_READ_FRAMEBUFFER_BINDING_EXT GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_ACTIVE_STENCIL_FACE_EXT GL_MAX_DRAW_BUFFERS GL_DRAW_BUFFER0 GL_DRAW_BUFFER1 GL_DRAW_BUFFER2 GL_DRAW_BUFFER3 GL_DRAW_BUFFER4 GL_DRAW_BUFFER5 GL_DRAW_BUFFER6 GL_DRAW_BUFFER7 GL_DRAW_BUFFER8 GL_DRAW_BUFFER9 GL_DRAW_BUFFER10 GL_DRAW_BUFFER11 GL_DRAW_BUFFER12 GL_DRAW_BUFFER13 GL_DRAW_BUFFER14 GL_DRAW_BUFFER15
+param       params      GLfloat *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetIntegerv
+return      void
+param       pname       GLenum
+paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV GL_FRAMEBUFFER_BINDING_EXT GL_RENDERBUFFER_BINDING_EXT GL_MAX_COLOR_ATTACHMENTS_EXT GL_MAX_RENDERBUFFER_SIZE_EXT GL_READ_FRAMEBUFFER_BINDING_EXT GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_ACTIVE_STENCIL_FACE_EXT GL_MAX_DRAW_BUFFERS GL_DRAW_BUFFER0 GL_DRAW_BUFFER1 GL_DRAW_BUFFER2 GL_DRAW_BUFFER3 GL_DRAW_BUFFER4 GL_DRAW_BUFFER5 GL_DRAW_BUFFER6 GL_DRAW_BUFFER7 GL_DRAW_BUFFER8 GL_DRAW_BUFFER9 GL_DRAW_BUFFER10 GL_DRAW_BUFFER11 GL_DRAW_BUFFER12 GL_DRAW_BUFFER13 GL_DRAW_BUFFER14 GL_DRAW_BUFFER15
+param       params      GLint *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetLightfv
+return      void
+param       light       GLenum
+paramprop   light       GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7
+param       pname       GLenum
+paramprop   pname       GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION GL_SPOT_DIRECTION GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION
+param       params      GLfloat *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetLightiv
+return      void
+param       light       GLenum
+paramprop   light       GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7
+param       pname       GLenum
+paramprop       pname       GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION GL_SPOT_DIRECTION GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION
+param       params      GLint *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetMapdv
+return      void
+param       target      GLenum
+paramprop   target      GL_MAP1_COLOR_4 GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4
+param       query       GLenum
+paramprop   query       GL_COEFF GL_DOMAIN GL_ORDER
+param       v       GLdouble *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetMapfv
+return      void
+param       target      GLenum
+paramprop   target      GL_MAP1_COLOR_4 GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4
+param       query       GLenum
+paramprop   query       GL_COEFF GL_DOMAIN GL_ORDER
+param       v       GLfloat *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetMapiv
+return      void
+param       target      GLenum
+paramprop   target      GL_MAP1_COLOR_4 GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4
+param       query       GLenum
+paramprop   query       GL_COEFF GL_DOMAIN GL_ORDER
+param       v       GLint *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetMaterialfv
+return      void
+param       face        GLenum
+paramprop   face        GL_FRONT GL_BACK
+param       pname       GLenum
+paramprop   pname       GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_EMISSION GL_SHININESS GL_COLOR_INDEXES
+param       params      GLfloat *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetMaterialiv
+return      void
+param       face        GLenum
+paramprop   face        GL_FRONT GL_BACK
+param       pname       GLenum
+paramprop   pname       GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_EMISSION GL_SHININESS GL_COLOR_INDEXES
+param       params      GLint *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetPixelMapfv
+return      void
+param       map     GLenum
+paramprop   map     GL_PIXEL_MAP_I_TO_I GL_PIXEL_MAP_S_TO_S GL_PIXEL_MAP_I_TO_R GL_PIXEL_MAP_I_TO_G GL_PIXEL_MAP_I_TO_B GL_PIXEL_MAP_I_TO_A GL_PIXEL_MAP_R_TO_R GL_PIXEL_MAP_G_TO_G GL_PIXEL_MAP_B_TO_B GL_PIXEL_MAP_A_TO_A
+param       values      GLfloat *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetPixelMapuiv
+return      void
+param       map     GLenum
+paramprop   map     GL_PIXEL_MAP_I_TO_I GL_PIXEL_MAP_S_TO_S GL_PIXEL_MAP_I_TO_R GL_PIXEL_MAP_I_TO_G GL_PIXEL_MAP_I_TO_B GL_PIXEL_MAP_I_TO_A GL_PIXEL_MAP_R_TO_R GL_PIXEL_MAP_G_TO_G GL_PIXEL_MAP_B_TO_B GL_PIXEL_MAP_A_TO_A
+param       values      GLuint *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetPixelMapusv
+return      void
+param       map     GLenum
+paramprop   map     GL_PIXEL_MAP_I_TO_I GL_PIXEL_MAP_S_TO_S GL_PIXEL_MAP_I_TO_R GL_PIXEL_MAP_I_TO_G GL_PIXEL_MAP_I_TO_B GL_PIXEL_MAP_I_TO_A GL_PIXEL_MAP_R_TO_R GL_PIXEL_MAP_G_TO_G GL_PIXEL_MAP_B_TO_B GL_PIXEL_MAP_A_TO_A
+param       values      GLushort *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetPolygonStipple
+return      void
+param       mask        GLubyte *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetString
+return      const GLubyte *
+param       name        GLenum
+paramprop   name        GL_VENDOR GL_RENDERER GL_VERSION GL_EXTENSIONS
+category    1.0
+props       get
+chromium    extpack
+
+name        GetTexEnvfv
+return      void
+param       target      GLenum
+param       pname       GLenum
+paramset    [ target pname ] [ GL_TEXTURE_ENV ] [ GL_TEXTURE_ENV_MODE GL_TEXTURE_ENV_COLOR GL_POINT_SPRITE_ARB GL_COORD_REPLACE_ARB ]
+paramset    [ target pname ] [ GL_TEXTURE_FILTER_CONTROL_EXT ] [ GL_TEXTURE_LOD_BIAS_EXT ]
+param       params      GLfloat *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetTexEnviv
+return      void
+param       target      GLenum
+param       pname       GLenum
+paramset    [ target pname ] [ GL_TEXTURE_ENV ] [ GL_TEXTURE_ENV_MODE GL_TEXTURE_ENV_COLOR GL_POINT_SPRITE_ARB GL_COORD_REPLACE_ARB ]
+paramset    [ target pname ] [ GL_TEXTURE_FILTER_CONTROL_EXT ] [ GL_TEXTURE_LOD_BIAS_EXT ]
+param       params      GLint *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetTexGendv
+return      void
+param       coord       GLenum
+paramprop   coord       GL_S GL_T GL_R GL_Q
+param       pname       GLenum
+paramprop   pname       GL_TEXTURE_GEN_MODE GL_OBJECT_PLANE GL_EYE_PLANE
+param       params      GLdouble *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetTexGenfv
+return      void
+param       coord       GLenum
+paramprop   coord       GL_S GL_T GL_R GL_Q
+param       pname       GLenum
+paramprop   pname       GL_TEXTURE_GEN_MODE GL_OBJECT_PLANE GL_EYE_PLANE
+param       params      GLfloat *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetTexGeniv
+return      void
+param       coord       GLenum
+paramprop   coord       GL_S GL_T GL_R GL_Q
+param       pname       GLenum
+paramprop   pname       GL_TEXTURE_GEN_MODE GL_OBJECT_PLANE GL_EYE_PLANE
+param       params      GLint *
+category    1.0
+props       get
+chromium    extpack
+
+name        GetTexImage
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_RECTANGLE_NV
+param       level       GLint
+paramlist   level       0
+param       format      GLenum
+param       type        GLenum
+paramset    [ target format type ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ] [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_RGB ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+paramset    [ target format type ]  [ GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels      GLvoid *
+paramaction pixels      genTex
+category    1.0
+props       get pixelstore
+chromium    extpack
+
+name        GetTexParameterfv
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_RECTANGLE_NV
+param       pname       GLenum
+paramprop   pname       GL_GENERATE_MIPMAP_SGIS GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_FILTER GL_TEXTURE_MIN_LOD GL_TEXTURE_MAX_LOD GL_TEXTURE_BASE_LEVEL GL_TEXTURE_MAX_LEVEL GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_WRAP_R GL_TEXTURE_BORDER_COLOR GL_TEXTURE_PRIORITY GL_TEXTURE_RESIDENT GL_TEXTURE_COMPARE_FUNC_ARB GL_TEXTURE_COMPARE_MODE_ARB GL_TEXTURE_MAX_ANISOTROPY_EXT
+param       params      GLfloat *
+paramvec    params      0.0 0.0 0.0 0.0
+category    1.0
+props       get
+chromium    extpack
+
+name        GetTexParameteriv
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_RECTANGLE_NV
+param       pname       GLenum
+paramprop   pname       GL_GENERATE_MIPMAP_SGIS GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_FILTER GL_TEXTURE_MIN_LOD GL_TEXTURE_MAX_LOD GL_TEXTURE_BASE_LEVEL GL_TEXTURE_MAX_LEVEL GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_WRAP_R GL_TEXTURE_BORDER_COLOR GL_TEXTURE_PRIORITY GL_TEXTURE_RESIDENT GL_TEXTURE_COMPARE_FUNC_ARB GL_TEXTURE_COMPARE_MODE_ARB GL_TEXTURE_MAX_ANISOTROPY_EXT
+param       params      GLint *
+paramvec    params      0 0 0 0
+category    1.0
+props       get
+chromium    extpack
+
+name        GetTexLevelParameterfv
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_PROXY_TEXTURE_1D GL_PROXY_TEXTURE_2D GL_PROXY_TEXTURE_3D GL_TEXTURE_RECTANGLE_NV
+param       level       GLint
+paramlist   level       0
+param       pname       GLenum
+paramprop   pname       GL_TEXTURE_WIDTH GL_TEXTURE_HEIGHT GL_TEXTURE_DEPTH GL_TEXTURE_INTERNAL_FORMAT GL_TEXTURE_BORDER GL_TEXTURE_RED_SIZE GL_TEXTURE_GREEN_SIZE GL_TEXTURE_BLUE_SIZE GL_TEXTURE_ALPHA_SIZE GL_TEXTURE_LUMINANCE_SIZE GL_TEXTURE_INTENSITY_SIZE GL_TEXTURE_DEPTH_SIZE_ARB TEXTURE_RED_TYPE_ARB TEXTURE_GREEN_TYPE_ARB TEXTURE_BLUE_TYPE_ARB TEXTURE_ALPHA_TYPE_ARB TEXTURE_LUMINANCE_TYPE_ARB TEXTURE_INTENSITY_TYPE_ARB TEXTURE_DEPTH_TYPE_ARB
+param       params      GLfloat *
+paramvec    params      0.0 0.0 0.0 0.0
+category    1.0
+props       get
+chromium    extpack
+
+name        GetTexLevelParameteriv
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_PROXY_TEXTURE_1D GL_PROXY_TEXTURE_2D GL_PROXY_TEXTURE_3D GL_TEXTURE_RECTANGLE_NV
+param       level       GLint
+paramlist   level       0
+param       pname       GLenum
+paramprop   pname       GL_TEXTURE_WIDTH GL_TEXTURE_HEIGHT GL_TEXTURE_DEPTH GL_TEXTURE_INTERNAL_FORMAT GL_TEXTURE_BORDER GL_TEXTURE_RED_SIZE GL_TEXTURE_GREEN_SIZE GL_TEXTURE_BLUE_SIZE GL_TEXTURE_ALPHA_SIZE GL_TEXTURE_LUMINANCE_SIZE GL_TEXTURE_INTENSITY_SIZE GL_TEXTURE_DEPTH_SIZE_ARB TEXTURE_RED_TYPE_ARB TEXTURE_GREEN_TYPE_ARB TEXTURE_BLUE_TYPE_ARB TEXTURE_ALPHA_TYPE_ARB TEXTURE_LUMINANCE_TYPE_ARB TEXTURE_INTENSITY_TYPE_ARB TEXTURE_DEPTH_TYPE_ARB
+param       params      GLint *
+paramvec    params      0 0 0 0
+category    1.0
+props       get
+chromium    extpack
+
+name        IsEnabled
+return      GLboolean
+param       cap     GLenum
+paramprop   cap     GL_ALPHA_TEST GL_AUTO_NORMAL GL_BLEND GL_COLOR_ARRAY GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_TABLE GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_CULL_FACE GL_DEPTH_TEST GL_DITHER GL_EDGE_FLAG_ARRAY GL_FOG GL_HISTOGRAM GL_INDEX_ARRAY GL_INDEX_LOGIC_OP GL_LIGHTING GL_LINE_SMOOTH GL_LINE_STIPPLE GL_MAP1_COLOR_4 GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP2_COLOR_4 GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MINMAX GL_NORMAL_ARRAY GL_NORMALIZE GL_POINT_SMOOTH GL_POLYGON_SMOOTH GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_STIPPLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_RESCALE_NORMAL GL_SCISSOR_TEST GL_SEPARABLE_2D GL_STENCIL_TEST GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_VERTEX_ARRAY GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_POINT_SPRITE_ARB GL_RASTER_POSITION_UNCLIPPED_IBM GL_PER_STAGE_CONSTANTS_NV GL_COLOR_SUM_EXT GL_TEXTURE_RECTANGLE_NV
+
+category    1.0
+props       get
+chromium    extpack
+
+name        IsList
+return      GLboolean
+param       list        GLuint
+category    1.0
+props       get
+chromium    extpack
+
+name        DepthRange
+return      void
+param       zNear       GLclampd
+param       zFar        GLclampd
+category    1.0
+chromium    pack
+
+name        Frustum
+return      void
+param       left        GLdouble
+paramlist   left        -1.0
+param       right       GLdouble
+paramlist   right       1.0
+param       bottom      GLdouble
+paramlist   bottom      -1.0
+param       top     GLdouble
+paramlist   top     1.0
+param       zNear       GLdouble
+paramlist   zNear       1.0
+param       zFar        GLdouble
+paramlist   zFar        10.0
+category    1.0
+chromium    pack
+
+name        LoadIdentity
+return      void
+category    1.0
+chromium    pack
+
+name        LoadMatrixf
+return      void
+param       m       const GLfloat *
+paramvec    m       1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1
+vector      m       16
+category    1.0
+chromium    pack
+
+name        LoadMatrixd
+return      void
+param       m       const GLdouble *
+paramvec    m       1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1
+vector      m       16
+category    1.0
+chromium    pack
+
+name        MatrixMode
+return      void
+param       mode        GLenum
+paramprop   mode        GL_MODELVIEW GL_PROJECTION GL_TEXTURE GL_COLOR
+category    1.0
+chromium    pack
+
+name        MultMatrixf
+return      void
+param       m       const GLfloat *
+paramvec    m       1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1
+vector      m       16
+category    1.0
+chromium    pack
+
+name        MultMatrixd
+return      void
+param       m       const GLdouble *
+paramvec    m       1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1
+vector      m       16
+category    1.0
+chromium    pack
+
+name        Ortho
+return      void
+param       left        GLdouble
+param       right       GLdouble
+param       bottom      GLdouble
+param       top     GLdouble
+param       zNear       GLdouble
+param       zFar        GLdouble
+category    1.0
+chromium    pack
+
+name        PopMatrix
+return      void
+category    1.0
+chromium    pack
+
+name        PushMatrix
+return      void
+category    1.0
+chromium    pack
+
+name        Rotated
+return      void
+param       angle       GLdouble
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+category    1.0
+chromium    pack
+
+name        Rotatef
+return      void
+param       angle       GLfloat
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+category    1.0
+chromium    pack
+
+name        Scaled
+return      void
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+category    1.0
+chromium    pack
+
+name        Scalef
+return      void
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+category    1.0
+chromium    pack
+
+name        Translated
+return      void
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+category    1.0
+chromium    pack
+
+name        Translatef
+return      void
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+category    1.0
+chromium    pack
+
+name        Viewport
+return      void
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+param       height      GLsizei
+category    1.0
+chromium    pack
+
+
+# OpenGL 1.1
+
+name        ArrayElement
+return      void
+param       i       GLint
+category    1.1
+props       useclient
+chromium    pack
+
+name        ColorPointer
+return      void
+param       size        GLint
+paramlist   size        3 4
+param       type        GLenum
+paramprop   type        GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+paramlist   stride      0
+param       pointer     const GLvoid *
+category    1.1
+props       setclient
+chromium    extpack
+
+name        DisableClientState
+return      void
+param       array       GLenum
+paramprop   array       GL_COLOR_ARRAY GL_INDEX_ARRAY GL_NORMAL_ARRAY GL_TEXTURE_COORD_ARRAY GL_VERTEX_ARRAY GL_VERTEX_ATTRIB_ARRAY0_NV GL_VERTEX_ATTRIB_ARRAY1_NV GL_VERTEX_ATTRIB_ARRAY2_NV GL_VERTEX_ATTRIB_ARRAY3_NV GL_VERTEX_ATTRIB_ARRAY4_NV GL_VERTEX_ATTRIB_ARRAY5_NV GL_VERTEX_ATTRIB_ARRAY6_NV GL_VERTEX_ATTRIB_ARRAY7_NV GL_VERTEX_ATTRIB_ARRAY8_NV GL_VERTEX_ATTRIB_ARRAY9_NV GL_VERTEX_ATTRIB_ARRAY10_NV GL_VERTEX_ATTRIB_ARRAY11_NV GL_VERTEX_ATTRIB_ARRAY12_NV GL_VERTEX_ATTRIB_ARRAY13_NV GL_VERTEX_ATTRIB_ARRAY14_NV GL_VERTEX_ATTRIB_ARRAY15_NV GL_EDGE_FLAG_ARRAY GL_FOG_COORDINATE_ARRAY_POINTER_EXT GL_SECONDARY_COLOR_ARRAY_EXT GL_FOG_COORDINATE_ARRAY_EXT GL_SECONDARY_COLOR_ARRAY_EXT
+category    1.1
+props       setclient
+chromium    pack
+
+name        DrawArrays
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES GL_QUAD_STRIP GL_QUADS GL_POLYGON
+param       first       GLint
+param       count       GLsizei
+category    1.1
+props       useclient
+chromium    pack
+
+name        DrawElements
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES GL_QUAD_STRIP GL_QUADS GL_POLYGON
+param       count       GLsizei
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT GL_UNSIGNED_INT
+param       indices     const GLvoid *
+category    1.1
+props       useclient
+chromium    extpack
+
+name        EdgeFlagPointer
+return      void
+param       stride      GLsizei
+param       pointer     const GLvoid *
+category    1.1
+props       setclient
+chromium    extpack
+
+name        EnableClientState
+return      void
+param       array       GLenum
+paramprop   array       GL_COLOR_ARRAY GL_INDEX_ARRAY GL_NORMAL_ARRAY GL_TEXTURE_COORD_ARRAY GL_VERTEX_ARRAY GL_VERTEX_ATTRIB_ARRAY0_NV GL_VERTEX_ATTRIB_ARRAY1_NV GL_VERTEX_ATTRIB_ARRAY2_NV GL_VERTEX_ATTRIB_ARRAY3_NV GL_VERTEX_ATTRIB_ARRAY4_NV GL_VERTEX_ATTRIB_ARRAY5_NV GL_VERTEX_ATTRIB_ARRAY6_NV GL_VERTEX_ATTRIB_ARRAY7_NV GL_VERTEX_ATTRIB_ARRAY8_NV GL_VERTEX_ATTRIB_ARRAY9_NV GL_VERTEX_ATTRIB_ARRAY10_NV GL_VERTEX_ATTRIB_ARRAY11_NV GL_VERTEX_ATTRIB_ARRAY12_NV GL_VERTEX_ATTRIB_ARRAY13_NV GL_VERTEX_ATTRIB_ARRAY14_NV GL_VERTEX_ATTRIB_ARRAY15_NV GL_EDGE_FLAG_ARRAY GL_FOG_COORDINATE_ARRAY_POINTER_EXT GL_SECONDARY_COLOR_ARRAY_EXT GL_FOG_COORDINATE_ARRAY_EXT GL_SECONDARY_COLOR_ARRAY_EXT
+category    1.1
+props       setclient
+chromium    pack
+
+name        GetPointerv
+return      void
+param       pname       GLenum
+paramprop   pname       GL_COLOR_ARRAY_POINTER GL_EDGE_FLAG_ARRAY_POINTER GL_FEEDBACK_BUFFER_POINTER GL_INDEX_ARRAY_POINTER GL_NORMAL_ARRAY_POINTER GL_TEXTURE_COORD_ARRAY_POINTER GL_SELECTION_BUFFER_POINTER GL_VERTEX_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER_EXT GL_SECONDARY_COLOR_ARRAY_POINTER_EXT
+param       params      GLvoid **
+category    1.1
+props       useclient get
+chromium    extpack
+
+name        IndexPointer
+return      void
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_SHORT GL_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+param       pointer     const GLvoid *
+category    1.1
+props       setclient
+chromium    extpack
+
+name        InterleavedArrays
+return      void
+param       format      GLenum
+paramprop   format      GL_V2F GL_V3F GL_C4UB_V2F GL_C4UB_V3F GL_C3F_V3F GL_N3F_V3F GL_C4F_N3F_V3F GL_T2F_V3F GL_T4F_V4F GL_T2F_C4UB_V3F GL_T2F_C3F_V3F GL_T2F_N3F_V3F GL_T2F_C4F_N3F_V3F GL_T4F_C4F_N3F_V4F
+param       stride      GLsizei
+param       pointer     const GLvoid *
+category    1.1
+props       setclient
+chromium    extpack
+
+name        NormalPointer
+return      void
+param       type        GLenum
+paramprop   type        GL_BYTE GL_SHORT GL_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+param       pointer     const GLvoid *
+category    1.1
+props       setclient
+chromium    extpack
+
+name        TexCoordPointer
+return      void
+param       size        GLint
+paramlist   size        1 2 3 4
+param       type        GLenum
+paramprop   type        GL_SHORT GL_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+paramlist   stride      0
+param       pointer     const GLvoid *
+category    1.1
+props       setclient
+chromium    extpack
+
+name        VertexPointer
+return      void
+param       size        GLint
+paramlist   size        2 3 4
+param       type        GLenum
+paramprop   type        GL_SHORT GL_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+paramlist   stride      0
+param       pointer     const GLvoid *
+category    1.1
+props       setclient
+chromium    extpack
+
+name        PolygonOffset
+return      void
+param       factor      GLfloat
+param       units       GLfloat
+category    1.1
+chromium    pack
+
+name        CopyTexImage1D
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D
+param       level       GLint
+paramlist   level       0
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16 GL_DEPTH_COMPONENT16_ARB GL_DEPTH_COMPONENT24_ARB GL_DEPTH_COMPONENT32_ARB
+param       x       GLint
+paramlist   x       0
+param       y       GLint
+paramlist   y       0
+param       width       GLsizei
+paramlist   width       0
+param       border      GLint
+paramlist   border      0
+paramaction pixel       enableTex
+category    1.1
+chromium    pack
+
+name        CopyTexImage2D
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_2D GL_TEXTURE_RECTANGLE_NV
+param       level       GLint
+paramlist   level       0
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16 GL_DEPTH_COMPONENT16_ARB GL_DEPTH_COMPONENT24_ARB GL_DEPTH_COMPONENT32_ARB
+param       x       GLint
+paramlist   x       0
+param       y       GLint
+paramlist   y       0
+param       width       GLsizei
+paramlist   width       8
+param       height      GLsizei
+paramlist   height      8
+param       border      GLint
+paramlist   border      0
+paramaction pixel       enableTex
+category    1.1
+chromium    pack
+
+name        CopyTexSubImage1D
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D
+param       level       GLint
+paramlist   level       0
+param       xoffset     GLint
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+paramaction pixel       enableTex
+category    1.1
+chromium    pack
+
+name        CopyTexSubImage2D
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_2D GL_TEXTURE_RECTANGLE_NV
+param       level       GLint
+paramlist   level       0
+param       xoffset     GLint
+param       yoffset     GLint
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+param       height      GLsizei
+paramaction pixel       enableTex
+category    1.1
+chromium    pack
+
+# paramset  [ target format type ]  [ GL_TEXTURE_1D ] [ GL_COLOR_INDEX ] [ GL_BITMAP ]
+name        TexSubImage1D
+return      void
+param       target      GLenum
+param       level       GLint
+paramlist   level       0
+param       xoffset     GLint
+paramlist   xoffset     0
+param       width       GLsizei
+paramlist   width       4
+param       format      GLenum
+param       type        GLenum
+paramset    [ target format type ]  [ GL_TEXTURE_1D ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ] [ GL_TEXTURE_1D ] [ GL_RGB ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+paramset    [ target format type ]  [ GL_TEXTURE_1D ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels      const GLvoid *
+paramaction pixels      pixelStore
+category    1.1
+props       pixelstore
+chromium    pack
+
+# paramset  [ target format type ]  [ GL_TEXTURE_2D GL_TEXTURE_RECTANGLE_NV ] [ GL_COLOR_INDEX ] [ GL_BITMAP ]
+name        TexSubImage2D
+return      void
+param       target      GLenum
+param       level       GLint
+paramlist   level       0
+param       xoffset     GLint
+paramlist   xoffset     1
+param       yoffset     GLint
+paramlist   yoffset     1
+param       width       GLsizei
+paramlist   width       4
+param       height      GLsizei
+paramlist   height      4
+param       format      GLenum
+param       type        GLenum
+paramset    [ target format type ]  [ GL_TEXTURE_2D ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ] [ GL_TEXTURE_2D ] [ GL_RGB ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+paramset    [ target format type ]  [ GL_TEXTURE_2D ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels      const GLvoid *
+paramaction pixels      pixelStore
+category    1.1
+props       pixelstore
+chromium    pack
+
+name        AreTexturesResident
+return      GLboolean
+param       n       GLsizei
+param       textures    const GLuint *
+param       residences  GLboolean *
+category    1.1
+props       get
+chromium    extpack serverdependent
+
+name        BindTexture
+return      void
+param       target      GLenum
+paramset    [ target texture ]  [ GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_1D ] [ 1 ]
+paramset    [ target texture ]  [ GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_2D ] [ 2 ]
+paramset    [ target texture ]  [ GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_3D ] [ 3 ]
+param       texture     GLuint
+category    1.1
+chromium    pack
+
+name        DeleteTextures
+return      void
+param       n       GLsizei
+param       textures    const GLuint *
+category    1.1
+props       nolist
+chromium    pack
+
+name        GenTextures
+return      void
+param       n       GLsizei
+param       textures    GLuint *
+category    1.1
+props       get
+chromium    extpack serverdependent
+
+name        IsTexture
+return      GLboolean
+param       texture     GLuint
+category    1.1
+props       get
+chromium    extpack
+
+name        PrioritizeTextures
+return      void
+param       n       GLsizei
+param       textures    const GLuint *
+param       priorities  const GLclampf *
+category    1.1
+chromium    pack
+
+name        Indexub
+return      void
+param       c       GLubyte
+category    1.1
+props       pervertex
+chromium    pack
+
+name        Indexubv
+return      void
+param       c       const GLubyte *
+paramvec    c       1
+vector      c       1
+category    1.1
+props       pervertex
+vectoralias Indexub
+
+name        PopClientAttrib
+return      void
+category    1.1
+props       setclient
+chromium    extpack
+
+name        PushClientAttrib
+return      void
+param       mask        GLbitfield
+category    1.1
+props       setclient
+chromium    extpack
+
+
+# GL_EXT_blend_color
+
+name        BlendColorEXT
+return      void
+param       red GLclampf
+param       green   GLclampf
+param       blue    GLclampf
+param       alpha   GLclampf
+category    GL_EXT_blend_color
+chromium    extpack
+
+
+# GL_EXT_blend_minmax
+
+name        BlendEquationEXT
+return      void
+param       mode        GLenum
+paramprop   mode        GL_FUNC_ADD_EXT GL_MIN_EXT GL_MAX_EXT GL_FUNC_SUBTRACT_EXT GL_FUNC_REVERSE_SUBTRACT_EXT GL_FUNC_SUBTRACT_EXT GL_FUNC_REVERSE_SUBTRACT_EXT
+category    GL_EXT_blend_minmax
+chromium    extpack
+# get <pname> GL_BLEND_EQUATION_EXT
+
+
+# OpenGL 1.2
+
+name        BlendColor
+return      void
+param       red     GLclampf
+param       green       GLclampf
+param       blue        GLclampf
+param       alpha       GLclampf
+category    1.2
+alias       BlendColorEXT
+chromium    nopack
+
+name        BlendEquation
+return      void
+param       mode        GLenum
+paramprop   mode        GL_FUNC_ADD GL_FUNC_SUBTRACT GL_FUNC_REVERSE_SUBTRACT GL_MIN GL_MAX GL_LOGIC_OP
+category    1.2
+alias       BlendEquationEXT
+chromium    nopack
+
+name        DrawRangeElements
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES GL_QUAD_STRIP GL_QUADS GL_POLYGON
+param       start       GLuint
+paramlist   start       0
+param       end     GLuint
+paramlist   end     10
+param       count       GLsizei
+paramlist   count       10
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT GL_UNSIGNED_INT
+param       indices     const GLvoid *
+category    1.2
+props       useclient
+chromium    extpack
+
+name        ColorTable
+return      void
+param       target      GLenum
+paramprop   target      GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_PROXY_COLOR_TABLE GL_PROXY_POST_CONVOLUTION_COLOR_TABLE GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       width       GLsizei
+paramlist   width       256
+param       format      GLenum
+paramprop   format      GL_COLOR_INDEX GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type        GLenum
+paramprop   type        GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_2_BYTES GL_3_BYTES GL_4_BYTES
+param       table       const GLvoid *
+category    1.2
+chromium    stub checklist
+
+name        ColorTableParameterfv
+return      void
+param       target      GLenum
+paramprop   target      GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE
+param       pname       GLenum
+paramprop   pname       GL_COLOR_TABLE_SCALE GL_COLOR_TABLE_BIAS
+param       params      const GLfloat *
+category    1.2
+chromium    stub
+
+name        ColorTableParameteriv
+return      void
+param       target      GLenum
+paramprop   target      GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE
+param       pname       GLenum
+paramprop   pname       GL_COLOR_TABLE_SCALE GL_COLOR_TABLE_BIAS
+param       params      const GLint *
+category    1.2
+chromium    stub
+
+name        CopyColorTable
+return      void
+param       target      GLenum
+paramprop   target      GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+category    1.2
+chromium    stub
+
+name        GetColorTable
+return      void
+param       target      GLenum
+paramprop   target      GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE
+param       format      GLenum
+paramprop   format       GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       table       GLvoid *
+category    1.2
+props       get
+chromium    stub
+
+name        GetColorTableParameterfv
+return      void
+param       target      GLenum
+paramprop   target      GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_PROXY_COLOR_TABLE GL_PROXY_POST_CONVOLUTION_COLOR_TABLE GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE
+param       pname       GLenum
+paramprop   pname       GL_COLOR_TABLE_BIAS GL_COLOR_TABLE_SCALE GL_COLOR_TABLE_FORMAT GL_COLOR_TABLE_WIDTH GL_COLOR_TABLE_RED_SIZE GL_COLOR_TABLE_GREEN_SIZE GL_COLOR_TABLE_BLUE_SIZE GL_COLOR_TABLE_ALPHA_SIZE GL_COLOR_TABLE_LUMINANCE_SIZE GL_COLOR_TABLE_INTENSITY_SIZE
+param       params      GLfloat *
+category    1.2
+props       get
+chromium    stub
+
+name        GetColorTableParameteriv
+return      void
+param       target      GLenum
+paramprop   target      GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_PROXY_COLOR_TABLE GL_PROXY_POST_CONVOLUTION_COLOR_TABLE GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE
+param       pname       GLenum
+paramprop   pname       GL_COLOR_TABLE_BIAS GL_COLOR_TABLE_SCALE GL_COLOR_TABLE_FORMAT GL_COLOR_TABLE_WIDTH GL_COLOR_TABLE_RED_SIZE GL_COLOR_TABLE_GREEN_SIZE GL_COLOR_TABLE_BLUE_SIZE GL_COLOR_TABLE_ALPHA_SIZE GL_COLOR_TABLE_LUMINANCE_SIZE GL_COLOR_TABLE_INTENSITY_SIZE
+param       params      GLint *
+category    1.2
+props       get
+chromium    stub
+
+name        ColorSubTable
+return      void
+param       target      GLenum
+paramprop   target      GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE
+param       start       GLsizei
+param       count       GLsizei
+param       format      GLenum
+paramprop   format      GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       data        const GLvoid *
+category    1.2
+chromium    stub
+
+name        CopyColorSubTable
+return      void
+param       target      GLenum
+paramprop   target      GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE
+param       start       GLsizei
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+category    1.2
+chromium    stub
+
+name        ConvolutionFilter1D
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_1D
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_INTENSITY GL_RGB GL_RGBA
+param       width       GLsizei
+param       format      GLenum
+paramprop   format  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       image       const GLvoid *
+category    1.2
+chromium    stub
+
+name        ConvolutionFilter2D
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_2D
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       width       GLsizei
+param       height      GLsizei
+param       format      GLenum
+paramprop   format      GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type        GLenum
+param       image       const GLvoid *
+category    1.2
+chromium    stub
+
+name        ConvolutionParameterf
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname       GLenum
+paramprop   pname       GL_CONVOLUTION_BORDER_MODE
+param       params      GLfloat
+category    1.2
+chromium    stub
+
+name        ConvolutionParameterfv
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname       GLenum
+paramprop   pname       GL_CONVOLUTION_BORDER_MODE GL_CONVOLUTION_BORDER_COLOR GL_CONVOLUTION_FILTER_SCALE GL_CONVOLUTION_FILTER_BIAS
+param       params      const GLfloat *
+category    1.2
+chromium    stub
+
+name        ConvolutionParameteri
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname       GLenum
+paramprop   pname       GL_CONVOLUTION_BORDER_MODE
+param       params      GLint
+category    1.2
+chromium    stub
+
+name        ConvolutionParameteriv
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname       GLenum
+paramprop   pname       GL_CONVOLUTION_BORDER_MODE GL_CONVOLUTION_BORDER_COLOR GL_CONVOLUTION_FILTER_SCALE GL_CONVOLUTION_FILTER_BIAS
+param       params      const GLint *
+category    1.2
+chromium    stub
+
+name        CopyConvolutionFilter1D
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_1D
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+category    1.2
+chromium    stub
+
+name        CopyConvolutionFilter2D
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_2D
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+param       height      GLsizei
+category    1.2
+chromium    stub
+
+name        GetConvolutionFilter
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_2D GL_CONVOLUTION_1D
+param       format      GLenum
+paramprop   format      GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       image       GLvoid *
+category    1.2
+props       get
+chromium    stub
+
+name        GetConvolutionParameterfv
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname       GLenum
+paramprop   pname       GL_CONVOLUTION_BORDER_MODE GL_CONVOLUTION_BORDER_COLOR GL_CONVOLUTION_FILTER_SCALE GL_CONVOLUTION_FILTER_BIAS GL_CONVOLUTION_FORMAT GL_CONVOLUTION_WIDTH GL_CONVOLUTION_HEIGHT GL_MAX_CONVOLUTION_WIDTH GL_MAX_CONVOLUTION_HEIGHT
+param       params      GLfloat *
+category    1.2
+props       get
+chromium    stub
+
+name        GetConvolutionParameteriv
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname       GLenum
+paramprop   pname       GL_CONVOLUTION_BORDER_MODE GL_CONVOLUTION_BORDER_COLOR GL_CONVOLUTION_FILTER_SCALE GL_CONVOLUTION_FILTER_BIAS GL_CONVOLUTION_FORMAT GL_CONVOLUTION_WIDTH GL_CONVOLUTION_HEIGHT GL_MAX_CONVOLUTION_WIDTH GL_MAX_CONVOLUTION_HEIGHT
+param       params      GLint *
+category    1.2
+props       get
+chromium    stub
+
+name        GetSeparableFilter
+return      void
+param       target      GLenum
+paramprop   target      GL_SEPARABLE_2D
+param       format      GLenum
+paramprop   format      GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       row     GLvoid *
+param       column      GLvoid *
+param       span        GLvoid *
+category    1.2
+props       get
+chromium    stub
+
+name        SeparableFilter2D
+return      void
+param       target      GLenum
+paramprop   target      GL_SEPARABLE_2D
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       width       GLsizei
+param       height      GLsizei
+param       format      GLenum
+paramprop   format      GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       row     const GLvoid *
+param       column      const GLvoid *
+category    1.2
+props       get
+chromium    stub
+
+name        GetHistogram
+return      void
+param       target      GLenum
+paramprop   target      GL_HISTOGRAM
+param       reset       GLboolean
+param       format      GLenum
+paramprop   format      GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       values      GLvoid *
+category    1.2
+props       get
+chromium    stub
+
+name        GetHistogramParameterfv
+return      void
+param       target      GLenum
+paramprop   target      GL_HISTOGRAM GL_PROXY_HISTOGRAM
+param       pname       GLenum
+paramprop   pname       GL_HISTOGRAM_WIDTH GL_HISTOGRAM_FORMAT GL_HISTOGRAM_RED_SIZE GL_HISTOGRAM_GREEN_SIZE GL_HISTOGRAM_BLUE_SIZE GL_HISTOGRAM_ALPHA_SIZE GL_HISTOGRAM_LUMINANCE_SIZE GL_HISTOGRAM_SINK
+param       params      GLfloat *
+category    1.2
+props       get
+chromium    stub
+
+name        GetHistogramParameteriv
+return      void
+param       target      GLenum
+paramprop   target      GL_HISTOGRAM GL_PROXY_HISTOGRAM
+param       pname       GLenum
+paramprop   pname       GL_HISTOGRAM_WIDTH GL_HISTOGRAM_FORMAT GL_HISTOGRAM_RED_SIZE GL_HISTOGRAM_GREEN_SIZE GL_HISTOGRAM_BLUE_SIZE GL_HISTOGRAM_ALPHA_SIZE GL_HISTOGRAM_LUMINANCE_SIZE GL_HISTOGRAM_SINK
+param       params      GLint *
+category    1.2
+props       get
+chromium    stub
+
+name        GetMinmax
+return      void
+param       target      GLenum
+paramprop   target      GL_MINMAX
+param       reset       GLboolean
+param       format      GLenum
+paramprop   format      GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       values      GLvoid *
+category    1.2
+props       get
+chromium    stub
+
+name        GetMinmaxParameterfv
+return      void
+param       target      GLenum
+paramprop   target      GL_MINMAX
+param       pname       GLenum
+paramprop   pname       GL_MINMAX_FORMAT GL_MINMAX_SINK
+param       params      GLfloat *
+category    1.2
+props       get
+chromium    stub
+
+name        GetMinmaxParameteriv
+return      void
+param       target      GLenum
+paramprop   target      GL_MINMAX
+param       pname       GLenum
+paramprop   pname       GL_MINMAX_FORMAT GL_MINMAX_SINK
+param       params      GLint *
+category    1.2
+props       get
+chromium    stub
+
+name        Histogram
+return      void
+param       target      GLenum
+paramprop   target      GL_HISTOGRAM GL_PROXY_HISTOGRAM
+param       width       GLsizei
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       sink        GLboolean
+category    1.2
+chromium    stub checklist
+
+name        Minmax
+return      void
+param       target      GLenum
+paramprop   target      GL_MINMAX
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       sink        GLboolean
+category    1.2
+chromium    stub
+
+name        ResetHistogram
+return      void
+param       target      GLenum
+paramprop   target      GL_HISTOGRAM
+category    1.2
+chromium    stub
+
+name        ResetMinmax
+return      void
+param       target      GLenum
+paramprop   target      GL_MINMAX
+category    1.2
+chromium    stub
+
+name        TexImage3D
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_3D
+param       level       GLint
+paramlist   level       0
+param       internalFormat  GLint
+paramlist   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16 GL_COMPRESSED_ALPHA_ARB GL_COMPRESSED_LUMINANCE_ARB GL_COMPRESSED_LUMINANCE_ALPHA_ARB GL_COMPRESSED_INTENSITY_ARB GL_COMPRESSED_RGB_ARB GL_COMPRESSED_RGBA_ARB RGBA32F_ARB RGB32F_ARB ALPHA32F_ARB INTENSITY32F_ARB LUMINANCE32F_ARB LUMINANCE_ALPHA32F_ARB RGBA16F_ARB RGB16F_ARB ALPHA16F_ARB INTENSITY16F_ARB LUMINANCE16F_ARB LUMINANCE_ALPHA16F_ARB
+param       width       GLsizei
+paramlist   width       8
+param       height      GLsizei
+paramlist   height      8
+param       depth       GLsizei
+paramlist   depth       8
+param       border      GLint
+paramlist   border      0
+param       format      GLenum
+param       type        GLenum
+paramset    [ target format type ]  [ GL_TEXTURE_3D ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ] [ GL_TEXTURE_3D ] [ GL_RGB ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+paramset    [ target format type ]  [ GL_TEXTURE_3D ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels      const GLvoid *
+paramaction pixels      makeStripeImage
+category    1.2
+props       pixelstore
+chromium    pack checklist
+
+# paramset  [ target format type ]  [ GL_TEXTURE_3D ] [ GL_COLOR_INDEX ] [ GL_BITMAP ]
+name        TexSubImage3D
+return      void
+param       target      GLenum
+param       level       GLint
+paramlist   level       0
+param       xoffset     GLint
+paramlist   xoffset     1
+param       yoffset     GLint
+paramlist   yoffset     1
+param       zoffset     GLint
+paramlist   zoffset     1
+param       width       GLsizei
+paramlist   width       2
+param       height      GLsizei
+paramlist   height      2
+param       depth       GLsizei
+paramlist   depth       2
+param       format      GLenum
+param       type        GLenum
+paramset    [ target format type ]  [ GL_TEXTURE_3D ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ] [ GL_TEXTURE_3D ] [ GL_RGB ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+paramset    [ target format type ]  [ GL_TEXTURE_3D ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels      const GLvoid *
+paramaction pixels      pixelStore
+category    1.2
+props       pixelstore
+chromium    pack
+
+name        CopyTexSubImage3D
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_3D
+param       level       GLint
+param       xoffset     GLint
+param       yoffset     GLint
+param       zoffset     GLint
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+param       height      GLsizei
+category    1.2
+chromium    pack
+
+
+# GL_ARB_multitexture
+
+name        ActiveTextureARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0_ARB GL_TEXTURE1_ARB GL_TEXTURE2_ARB GL_TEXTURE3_ARB GL_TEXTURE4_ARB GL_TEXTURE5_ARB GL_TEXTURE6_ARB GL_TEXTURE7_ARB GL_TEXTURE8_ARB GL_TEXTURE9_ARB GL_TEXTURE10_ARB GL_TEXTURE11_ARB GL_TEXTURE12_ARB GL_TEXTURE13_ARB GL_TEXTURE14_ARB GL_TEXTURE15_ARB GL_TEXTURE16_ARB GL_TEXTURE17_ARB GL_TEXTURE18_ARB GL_TEXTURE19_ARB GL_TEXTURE20_ARB GL_TEXTURE21_ARB GL_TEXTURE22_ARB GL_TEXTURE23_ARB GL_TEXTURE24_ARB GL_TEXTURE25_ARB GL_TEXTURE26_ARB GL_TEXTURE27_ARB GL_TEXTURE28_ARB GL_TEXTURE29_ARB GL_TEXTURE30_ARB GL_TEXTURE31_ARB
+category    GL_ARB_multitexture
+chromium    extpack
+
+name        ClientActiveTextureARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0_ARB GL_TEXTURE1_ARB GL_TEXTURE2_ARB GL_TEXTURE3_ARB GL_TEXTURE4_ARB GL_TEXTURE5_ARB GL_TEXTURE6_ARB GL_TEXTURE7_ARB GL_TEXTURE8_ARB GL_TEXTURE9_ARB GL_TEXTURE10_ARB GL_TEXTURE11_ARB GL_TEXTURE12_ARB GL_TEXTURE13_ARB GL_TEXTURE14_ARB GL_TEXTURE15_ARB GL_TEXTURE16_ARB GL_TEXTURE17_ARB GL_TEXTURE18_ARB GL_TEXTURE19_ARB GL_TEXTURE20_ARB GL_TEXTURE21_ARB GL_TEXTURE22_ARB GL_TEXTURE23_ARB GL_TEXTURE24_ARB GL_TEXTURE25_ARB GL_TEXTURE26_ARB GL_TEXTURE27_ARB GL_TEXTURE28_ARB GL_TEXTURE29_ARB GL_TEXTURE30_ARB GL_TEXTURE31_ARB
+category    GL_ARB_multitexture
+props       setclient
+chromium    extpack
+
+name        MultiTexCoord1dARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLdouble
+paramlist   s       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord1dvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLdouble *
+paramvec    t       1.0
+vector      t       1
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord1dARB
+
+name        MultiTexCoord1fARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLfloat
+paramlist   s       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord1fvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLfloat *
+paramvec    t       1.0
+vector      t       1
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord1fARB
+
+name        MultiTexCoord1iARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLint
+paramlist   s       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord1ivARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLint *
+paramvec    t       1
+vector      t       1
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord1iARB
+
+name        MultiTexCoord1sARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLshort
+paramlist   s       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord1svARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLshort *
+paramvec    t       1
+vector      t       1
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord1sARB
+
+name        MultiTexCoord2dARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLdouble
+paramlist   s       0 .5 1
+param       t       GLdouble
+paramlist   t       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord2dvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLdouble *
+paramvec    t       1.0 1.0
+vector      t       2
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord2dARB
+
+name        MultiTexCoord2fARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLfloat
+paramlist   s       0 .5 1
+param       t       GLfloat
+paramlist   t       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord2fvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLfloat *
+paramvec    t       1.0 1.0
+vector      t       2
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord2fARB
+
+name        MultiTexCoord2iARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLint
+paramlist   s       0 .5 1
+param       t       GLint
+paramlist   t       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord2ivARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLint *
+paramvec    t       1 1
+vector      t       2
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord2iARB
+
+name        MultiTexCoord2sARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLshort
+paramlist   s       0 .5 1
+param       t       GLshort
+paramlist   t       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord2svARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLshort *
+paramvec    t       1 1
+vector      t       2
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord2sARB
+
+name        MultiTexCoord3dARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLdouble
+paramlist   s       0 .5 1
+param       t       GLdouble
+paramlist   t       0 .5 1
+param       r       GLdouble
+paramlist   r       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord3dvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLdouble *
+paramvec    t       1.0 1.0 1.0
+vector      t       3
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord3dARB
+
+name        MultiTexCoord3fARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLfloat
+paramlist   s       0 .5 1
+param       t       GLfloat
+paramlist   t       0 .5 1
+param       r       GLfloat
+paramlist   r       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord3fvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLfloat *
+paramvec    t       1.0 1.0 1.0
+vector      t       3
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord3fARB
+
+name        MultiTexCoord3iARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLint
+paramlist   s       0 1
+param       t       GLint
+paramlist   t       0 1
+param       r       GLint
+paramlist   r       0 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord3ivARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLint *
+paramvec    t       1 1 1
+vector      t       3
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord3iARB
+
+name        MultiTexCoord3sARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLshort
+paramlist   s       0 1
+param       t       GLshort
+paramlist   t       0 1
+param       r       GLshort
+paramlist   r       0 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord3svARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLshort *
+paramvec    t       1 1 1
+vector      t       3
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord3sARB
+
+name        MultiTexCoord4dARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLdouble
+paramlist   s       0 .5 1
+param       t       GLdouble
+paramlist   t       0 .5 1
+param       r       GLdouble
+paramlist   r       0 .5 1
+param       q       GLdouble
+paramlist   q       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord4dvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLdouble *
+paramvec    t       1.0 1.0 1.0 1.0
+vector      t       4
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord4dARB
+
+name        MultiTexCoord4fARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLfloat
+paramlist   s       0 .5 1
+param       t       GLfloat
+paramlist   t       0 .5 1
+param       r       GLfloat
+paramlist   r       0 .5 1
+param       q       GLfloat
+paramlist   q       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord4fvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLfloat *
+paramvec    t       1.0 1.0 1.0 1.0
+vector      t       4
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord4fARB
+
+name        MultiTexCoord4iARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLint
+paramlist   s       0 .5 1
+param       t       GLint
+paramlist   t       0 .5 1
+param       r       GLint
+paramlist   r       0 .5 1
+param       q       GLint
+paramlist   q       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord4ivARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLint *
+paramvec    t       1 1 1 1
+vector      t       4
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord4iARB
+
+name        MultiTexCoord4sARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLshort
+paramlist   s       0 .5 1
+param       t       GLshort
+paramlist   t       0 .5 1
+param       r       GLshort
+paramlist   r       0 .5 1
+param       q       GLshort
+paramlist   q       0 .5 1
+category    GL_ARB_multitexture
+props       pervertex
+chromium    pack
+
+name        MultiTexCoord4svARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       t       const GLshort *
+paramvec    t       1 1 1 1
+vector      t       4
+category    GL_ARB_multitexture
+props       pervertex
+vectoralias MultiTexCoord4sARB
+
+
+# GL_ARB_transpose_matrix
+
+name        LoadTransposeMatrixfARB
+return      void
+param       m       const GLfloat *
+paramvec    m       1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1
+vector      m       16
+category    GL_ARB_transpose_matrix
+chromium    extpack
+
+name        LoadTransposeMatrixdARB
+return      void
+param       m       const GLdouble *
+paramvec    m       1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1
+vector      m       16
+category    GL_ARB_transpose_matrix
+chromium    extpack
+
+name        MultTransposeMatrixfARB
+return      void
+param       m       const GLfloat *
+paramvec    m       1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1
+vector      m       16
+category    GL_ARB_transpose_matrix
+chromium    extpack
+
+name        MultTransposeMatrixdARB
+return      void
+param       m       const GLdouble *
+paramvec    m       1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1
+vector      m       16
+category    GL_ARB_transpose_matrix
+chromium    extpack
+
+
+# GL_ARB_multisample
+
+name        SampleCoverageARB
+return      void
+param       value       GLclampf
+param       invert      GLboolean
+category    GL_ARB_multisample
+chromium    extpack
+
+name        __unused413
+return      void
+category    unused
+chromium    omit
+
+
+# GL_ARB_texture_compression
+
+name        CompressedTexImage3DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_3D
+param       level       GLint
+paramlist   level       0
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT GL_COMPRESSED_RGB_FXT1_3DFX GL_COMPRESSED_RGBA_FXT1_3DFX
+param       width       GLsizei
+paramlist   width       8
+param       height      GLsizei
+paramlist   height      8
+param       depth       GLsizei
+paramlist   depth       2
+param       border      GLint
+paramlist   border      0
+param       imagesize   GLsizei
+paramlist   imagesize   8
+param       data        const GLvoid *
+paramaction data        pixelStore
+category    GL_ARB_texture_compression
+chromium    extpack checklist
+
+name        CompressedTexImage2DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_2D
+param       level       GLint
+paramlist   level       0
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT GL_COMPRESSED_RGB_FXT1_3DFX GL_COMPRESSED_RGBA_FXT1_3DFX
+param       width       GLsizei
+paramlist   width       8
+param       height      GLsizei
+paramlist   height      8
+param       border      GLint
+paramlist   border      0
+param       imagesize   GLsizei
+paramlist   imagesize   8
+param       data        const GLvoid *
+paramaction data        pixelStore
+category    GL_ARB_texture_compression
+chromium    extpack checklist
+
+name        CompressedTexImage1DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D
+param       level       GLint
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT GL_COMPRESSED_RGB_FXT1_3DFX GL_COMPRESSED_RGBA_FXT1_3DFX
+param       width       GLsizei
+paramlist   width       8
+param       border      GLint
+paramlist   border      1
+param       imagesize   GLsizei
+paramlist   imagesize   8
+param       data        const GLvoid *
+paramaction data        pixelStore
+category    GL_ARB_texture_compression
+chromium    extpack checklist
+
+name        CompressedTexSubImage3DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_3D
+param       level       GLint
+paramlist   level       0
+param       xoffset     GLint
+paramlist   xoffset     0
+param       yoffset     GLint
+param       zoffset     GLint
+paramlist   yoffset     0
+paramlist   zoffset     0
+param       width       GLsizei
+paramlist   width       8
+param       height      GLsizei
+paramlist   height      8
+param       depth       GLsizei
+paramlist   depth       8
+param       format      GLenum
+paramprop   format      GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT GL_COMPRESSED_RGB_FXT1_3DFX GL_COMPRESSED_RGBA_FXT1_3DFX
+param       imagesize   GLsizei
+paramlist   imagesize   8
+param       data        const GLvoid *
+paramaction data        pixelStore
+category    GL_ARB_texture_compression
+chromium    extpack
+
+name        CompressedTexSubImage2DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_2D
+param       level       GLint
+param       xoffset     GLint
+param       yoffset     GLint
+param       width       GLsizei
+param       height      GLsizei
+param       format      GLenum
+paramprop   format      GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT GL_COMPRESSED_RGB_FXT1_3DFX GL_COMPRESSED_RGBA_FXT1_3DFX
+param       imagesize   GLsizei
+param       data        const GLvoid *
+paramaction data        pixelStore
+category    GL_ARB_texture_compression
+chromium    extpack
+
+name        CompressedTexSubImage1DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D
+param       level       GLint
+paramlist   level       0
+param       xoffset     GLint
+paramlist   xoffset     0
+param       width       GLsizei
+paramlist   width       8
+param       format      GLenum
+paramprop   format      GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT GL_COMPRESSED_RGB_FXT1_3DFX GL_COMPRESSED_RGBA_FXT1_3DFX
+param       imagesize   GLsizei
+paramlist   imagesize   8
+param       data        const GLvoid *
+paramaction data        pixelStore
+category    GL_ARB_texture_compression
+chromium    extpack
+
+name        GetCompressedTexImageARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D
+param       level       GLint
+param       img     GLvoid *
+paramaction img     pixelStore
+category    GL_ARB_texture_compression
+props       get
+chromium    extpack serverdependent
+
+
+# OpenGL 1.3
+
+name        ActiveTexture
+alias       ActiveTextureARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0_ARB GL_TEXTURE1_ARB GL_TEXTURE2_ARB GL_TEXTURE3_ARB GL_TEXTURE4_ARB GL_TEXTURE5_ARB GL_TEXTURE6_ARB GL_TEXTURE7_ARB GL_TEXTURE8_ARB GL_TEXTURE9_ARB GL_TEXTURE10_ARB GL_TEXTURE11_ARB GL_TEXTURE12_ARB GL_TEXTURE13_ARB GL_TEXTURE14_ARB GL_TEXTURE15_ARB GL_TEXTURE16_ARB GL_TEXTURE17_ARB GL_TEXTURE18_ARB GL_TEXTURE19_ARB GL_TEXTURE20_ARB GL_TEXTURE21_ARB GL_TEXTURE22_ARB GL_TEXTURE23_ARB GL_TEXTURE24_ARB GL_TEXTURE25_ARB GL_TEXTURE26_ARB GL_TEXTURE27_ARB GL_TEXTURE28_ARB GL_TEXTURE29_ARB GL_TEXTURE30_ARB GL_TEXTURE31_ARB
+category    1.3
+chromium    nopack
+
+name        ClientActiveTexture
+alias       ClientActiveTextureARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0_ARB GL_TEXTURE1_ARB GL_TEXTURE2_ARB GL_TEXTURE3_ARB GL_TEXTURE4_ARB GL_TEXTURE5_ARB GL_TEXTURE6_ARB GL_TEXTURE7_ARB GL_TEXTURE8_ARB GL_TEXTURE9_ARB GL_TEXTURE10_ARB GL_TEXTURE11_ARB GL_TEXTURE12_ARB GL_TEXTURE13_ARB GL_TEXTURE14_ARB GL_TEXTURE15_ARB GL_TEXTURE16_ARB GL_TEXTURE17_ARB GL_TEXTURE18_ARB GL_TEXTURE19_ARB GL_TEXTURE20_ARB GL_TEXTURE21_ARB GL_TEXTURE22_ARB GL_TEXTURE23_ARB GL_TEXTURE24_ARB GL_TEXTURE25_ARB GL_TEXTURE26_ARB GL_TEXTURE27_ARB GL_TEXTURE28_ARB GL_TEXTURE29_ARB GL_TEXTURE30_ARB GL_TEXTURE31_ARB
+category    1.3
+props       setclient
+chromium    nopack
+
+name        MultiTexCoord1d
+alias       MultiTexCoord1dARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLdouble
+category    1.3
+chromium    nopack
+
+name        MultiTexCoord1dv
+alias       MultiTexCoord1dvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLdouble *
+category    1.3
+
+name        MultiTexCoord1f
+alias       MultiTexCoord1fARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLfloat
+category    1.3
+
+name        MultiTexCoord1fv
+alias       MultiTexCoord1fvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLfloat *
+category    1.3
+
+name        MultiTexCoord1i
+alias       MultiTexCoord1iARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLint
+category    1.3
+
+name        MultiTexCoord1iv
+alias       MultiTexCoord1ivARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLint *
+category    1.3
+
+name        MultiTexCoord1s
+alias       MultiTexCoord1sARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLshort
+category    1.3
+
+name        MultiTexCoord1sv
+alias       MultiTexCoord1svARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLshort *
+category    1.3
+
+name        MultiTexCoord2d
+alias       MultiTexCoord2dARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLdouble
+param       t       GLdouble
+category    1.3
+
+name        MultiTexCoord2dv
+alias       MultiTexCoord2dvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLdouble *
+category    1.3
+
+name        MultiTexCoord2f
+alias       MultiTexCoord2fARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLfloat
+param       t       GLfloat
+category    1.3
+
+name        MultiTexCoord2fv
+alias       MultiTexCoord2fvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLfloat *
+category    1.3
+
+name        MultiTexCoord2i
+alias       MultiTexCoord2iARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLint
+param       t       GLint
+category    1.3
+
+name        MultiTexCoord2iv
+alias       MultiTexCoord2ivARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLint *
+category    1.3
+
+name        MultiTexCoord2s
+alias       MultiTexCoord2sARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLshort
+param       t       GLshort
+category    1.3
+
+name        MultiTexCoord2sv
+alias       MultiTexCoord2svARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLshort *
+category    1.3
+
+name        MultiTexCoord3d
+alias       MultiTexCoord3dARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLdouble
+param       t       GLdouble
+param       r       GLdouble
+category    1.3
+
+name        MultiTexCoord3dv
+alias       MultiTexCoord3dvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLdouble *
+category    1.3
+
+name        MultiTexCoord3f
+alias       MultiTexCoord3fARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLfloat
+param       t       GLfloat
+param       r       GLfloat
+category    1.3
+
+name        MultiTexCoord3fv
+alias       MultiTexCoord3fvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLfloat *
+category    1.3
+
+name        MultiTexCoord3i
+alias       MultiTexCoord3iARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLint
+param       t       GLint
+param       r       GLint
+category    1.3
+
+name        MultiTexCoord3iv
+alias       MultiTexCoord3ivARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLint *
+category    1.3
+
+name        MultiTexCoord3s
+alias       MultiTexCoord3sARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLshort
+param       t       GLshort
+param       r       GLshort
+category    1.3
+
+name        MultiTexCoord3sv
+alias       MultiTexCoord3svARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLshort *
+category    1.3
+
+name        MultiTexCoord4d
+alias       MultiTexCoord4dARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLdouble
+param       t       GLdouble
+param       r       GLdouble
+param       q       GLdouble
+category    1.3
+
+name        MultiTexCoord4dv
+alias       MultiTexCoord4dvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLdouble *
+category    1.3
+
+name        MultiTexCoord4f
+alias       MultiTexCoord4fARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLfloat
+param       t       GLfloat
+param       r       GLfloat
+param       q       GLfloat
+category    1.3
+
+name        MultiTexCoord4fv
+alias       MultiTexCoord4fvARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLfloat *
+category    1.3
+
+name        MultiTexCoord4i
+alias       MultiTexCoord4iARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLint
+param       t       GLint
+param       r       GLint
+param       q       GLint
+category    1.3
+
+name        MultiTexCoord4iv
+alias       MultiTexCoord4ivARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLint *
+category    1.3
+
+name        MultiTexCoord4s
+alias       MultiTexCoord4sARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       s       GLshort
+param       t       GLshort
+param       r       GLshort
+param       q       GLshort
+category    1.3
+
+name        MultiTexCoord4sv
+alias       MultiTexCoord4svARB
+return      void
+param       texture     GLenum
+paramprop   texture     GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7
+param       v       const GLshort *
+category    1.3
+
+name        LoadTransposeMatrixf
+alias       LoadTransposeMatrixfARB
+return      void
+param       m       const GLfloat *
+category    1.3
+
+name        LoadTransposeMatrixd
+alias       LoadTransposeMatrixdARB
+return      void
+param       m       const GLdouble *
+category    1.3
+
+name        MultTransposeMatrixf
+alias       MultTransposeMatrixfARB
+return      void
+param       m       const GLfloat *
+category    1.3
+
+name        MultTransposeMatrixd
+alias       MultTransposeMatrixdARB
+return      void
+param       m       const GLdouble *
+category    1.3
+
+name        SampleCoverage
+alias       SampleCoverageARB
+return      void
+param       value       GLclampf
+param       invert      GLboolean
+category    1.3
+
+name        CompressedTexImage3D
+alias       CompressedTexImage3DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_3D
+param       level       GLint
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT GL_COMPRESSED_RGB_FXT1_3DFX GL_COMPRESSED_RGBA_FXT1_3DFX
+param       width       GLsizei
+param       height      GLsizei
+param       depth       GLsizei
+param       border      GLint
+paramlist   border      1
+param       imageSize   GLsizei
+param       data        const GLvoid *
+category    1.3
+chromium    checklist
+
+name        CompressedTexImage2D
+alias       CompressedTexImage2DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_2D
+param       level       GLint
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT GL_COMPRESSED_RGB_FXT1_3DFX GL_COMPRESSED_RGBA_FXT1_3DFX
+param       width       GLsizei
+param       height      GLsizei
+param       border      GLint
+paramlist   border      1
+param       imageSize   GLsizei
+param       data        const GLvoid *
+category    1.3
+chromium    checklist
+
+name        CompressedTexImage1D
+alias       CompressedTexImage1DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D
+param       level       GLint
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT GL_COMPRESSED_RGB_FXT1_3DFX GL_COMPRESSED_RGBA_FXT1_3DFX
+param       width       GLsizei
+param       border      GLint
+paramlist   border      1
+param       imageSize   GLsizei
+param       data        const GLvoid *
+category    1.3
+chromium    checklist
+
+name        CompressedTexSubImage3D
+alias       CompressedTexSubImage3DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_3D
+param       level       GLint
+param       xoffset     GLint
+param       yoffset     GLint
+param       zoffset     GLint
+param       width       GLsizei
+param       height      GLsizei
+param       depth       GLsizei
+param       format      GLenum
+paramprop   format      GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       imageSize   GLsizei
+param       data        const GLvoid *
+category    1.3
+
+name        CompressedTexSubImage2D
+alias       CompressedTexSubImage2DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_2D
+param       level       GLint
+param       xoffset     GLint
+param       yoffset     GLint
+param       width       GLsizei
+param       height      GLsizei
+param       format      GLenum
+paramprop   format      GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       imageSize   GLsizei
+param       data        const GLvoid *
+category    1.3
+
+name        CompressedTexSubImage1D
+alias       CompressedTexSubImage1DARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D
+param       level       GLint
+param       xoffset     GLint
+param       width       GLsizei
+param       format      GLenum
+paramprop   format      GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       imageSize   GLsizei
+param       data        const GLvoid *
+category    1.3
+
+name        GetCompressedTexImage
+alias       GetCompressedTexImageARB
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D
+param       level       GLint
+param       img     GLvoid *
+category    1.3
+props       get
+
+
+# GL_EXT_polygon_offset
+
+name        PolygonOffsetEXT
+return      void
+param       factor      GLfloat
+param       bias        GLfloat
+category    GL_EXT_polygon_offset
+chromium    omit
+
+
+# GL_EXT_texture3D
+
+name        TexImage3DEXT
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_3D
+param       level       GLint
+paramlist   level       0
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       width       GLsizei
+paramlist   width       8
+param       height      GLsizei
+paramlist   height      8
+param       depth       GLsizei
+paramlist   depth       16
+param       border      GLint
+paramlist   border      1
+param       format      GLenum
+param       type        GLenum
+paramset    [ target format type ]  [ GL_TEXTURE_3D ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ] [ GL_TEXTURE_3D ] [ GL_RGB ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+paramset    [ target format type ]  [ GL_TEXTURE_3D ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels      const GLvoid *
+category    GL_EXT_texture3D
+props       pixelstore
+chromium    pack checklist
+
+name        TexSubImage3DEXT
+alias       TexSubImage3D
+return      void
+param       target      GLenum
+param       level       GLint
+paramlist   level       0
+param       xoffset     GLint
+paramlist   xoffset     1
+param       yoffset     GLint
+paramlist   yoffset     1
+param       zoffset     GLint
+paramlist   zoffset     1
+param       width       GLsizei
+paramlist   width       2
+param       height      GLsizei
+paramlist   height      2
+param       depth       GLsizei
+paramlist   depth       2
+param       format      GLenum
+param       type        GLenum
+paramset    [ target format type ]  [ GL_TEXTURE_3D ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ] [ GL_TEXTURE_3D ] [ GL_RGB ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+paramset    [ target format type ]  [ GL_TEXTURE_3D ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels      const GLvoid *
+category    GL_EXT_texture3D
+props       pixelstore
+
+
+# GL_EXT_subtexture
+# paramset  [ target format type ]  [ GL_TEXTURE_1D ] [ GL_COLOR_INDEX ] [ GL_BITMAP ]
+name        TexSubImage1DEXT
+alias       TexSubImage1D
+return      void
+param       target  GLenum
+param       level   GLint
+param       xoffset GLint
+param       width   GLsizei
+param       format  GLenum
+param       type    GLenum
+paramset    [ target format type ]  [ GL_TEXTURE_1D ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ] [ GL_TEXTURE_1D ] [ GL_RGB ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+paramset    [ target format type ]  [ GL_TEXTURE_1D ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels  const GLvoid *
+category    GL_EXT_subtexture
+props       pixelstore
+
+# paramset  [ target format type ]  [ GL_TEXTURE_2D ] [ GL_COLOR_INDEX ] [ GL_BITMAP ]
+name        TexSubImage2DEXT
+alias       TexSubImage2D
+return      void
+param       target  GLenum
+param       level   GLint
+param       xoffset GLint
+param       yoffset GLint
+param       width   GLsizei
+param       height  GLsizei
+param       format  GLenum
+param       type    GLenum
+paramset    [ target format type ]  [ GL_TEXTURE_1D ] [ GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_BGR GL_LUMINANCE GL_LUMINANCE_ALPHA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT ]
+paramset    [ target format type ] [ GL_TEXTURE_1D ] [ GL_RGB ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV ]
+paramset    [ target format type ]  [ GL_TEXTURE_1D ] [ GL_RGBA GL_BGRA ] [ GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV ]
+param       pixels  const GLvoid *
+category    GL_EXT_subtexture
+props       pixelstore
+
+name        CopyTexImage1DEXT
+alias       CopyTexImage1D
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D
+param       level       GLint
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16 GL_COMPRESSED_ALPHA_ARB GL_COMPRESSED_LUMINANCE_ARB GL_COMPRESSED_LUMINANCE_ALPHA_ARB GL_COMPRESSED_INTENSITY_ARB GL_COMPRESSED_RGB_ARB GL_COMPRESSED_RGBA_ARB 
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+param       border      GLint
+paramlist   border      1
+category    GL_EXT_copy_texture
+
+name        CopyTexImage2DEXT
+alias       CopyTexImage2D
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_2D
+param       level       GLint
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16 GL_COMPRESSED_ALPHA_ARB GL_COMPRESSED_LUMINANCE_ARB GL_COMPRESSED_LUMINANCE_ALPHA_ARB GL_COMPRESSED_INTENSITY_ARB GL_COMPRESSED_RGB_ARB GL_COMPRESSED_RGBA_ARB 
+paramprop   pname       GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_FILTER GL_TEXTURE_MIN_LOD GL_TEXTURE_MAX_LOD GL_TEXTURE_BASE_LEVEL GL_TEXTURE_MAX_LEVEL GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_WRAP_R GL_TEXTURE_BORDER_COLOR GL_TEXTURE_PRIORITY GL_TEXTURE_RESIDENT GL_TEXTURE_COMPARE_FUNC_ARB GL_TEXTURE_COMPARE_MODE_ARB
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+param       height      GLsizei
+param       border      GLint
+paramlist   border      1
+category    GL_EXT_copy_texture
+
+name        CopyTexSubImage1DEXT
+alias       CopyTexSubImage1D
+return      void
+param       target  GLenum
+paramprop   target  GL_TEXTURE_1D
+param       level   GLint
+param       xoffset GLint
+param       x   GLint
+param       y   GLint
+param       width   GLsizei
+category    GL_EXT_copy_texture
+
+name        CopyTexSubImage2DEXT
+alias       CopyTexSubImage2D
+return      void
+param       target  GLenum
+paramprop   target  GL_TEXTURE_2D
+param       level   GLint
+param       xoffset GLint
+param       yoffset GLint
+param       x   GLint
+param       y   GLint
+param       width   GLsizei
+param       height  GLsizei
+category    GL_EXT_copy_texture
+
+name        CopyTexSubImage3DEXT
+alias       CopyTexSubImage3D
+return      void
+param       target  GLenum
+paramprop   target  GL_TEXTURE_3D
+param       level   GLint
+param       xoffset GLint
+param       yoffset GLint
+param       zoffset GLint
+param       x   GLint
+param       y   GLint
+param       width   GLsizei
+param       height  GLsizei
+category    GL_EXT_copy_texture
+
+
+# GL_EXT_histogram
+
+name        GetHistogramEXT
+return      void
+param       target  GLenum
+paramprop   target  GL_HISTOGRAM
+param       reset   GLboolean
+param       format  GLenum
+paramprop   format  GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type    GLenum
+paramprop   type    GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       values  GLvoid *
+category    GL_EXT_histogram
+props       get
+chromium    omit
+
+name        GetHistogramParameterfvEXT
+return      void
+param       target  GLenum
+paramprop   target  GL_HISTOGRAM GL_PROXY_HISTOGRAM
+param       pname   GLenum
+paramprop   pname   GL_HISTOGRAM_WIDTH GL_HISTOGRAM_FORMAT GL_HISTOGRAM_RED_SIZE GL_HISTOGRAM_GREEN_SIZE GL_HISTOGRAM_BLUE_SIZE GL_HISTOGRAM_ALPHA_SIZE GL_HISTOGRAM_LUMINANCE_SIZE GL_HISTOGRAM_SINK
+param       params  GLfloat *
+category    GL_EXT_histogram
+props       get
+chromium    omit
+
+name        GetHistogramParameterivEXT
+return      void
+param       target  GLenum
+paramprop   target` GL_HISTOGRAM GL_PROXY_HISTOGRAM
+param       pname   GLenum
+paramprop   pname   GL_HISTOGRAM_WIDTH GL_HISTOGRAM_FORMAT GL_HISTOGRAM_RED_SIZE GL_HISTOGRAM_GREEN_SIZE GL_HISTOGRAM_BLUE_SIZE GL_HISTOGRAM_ALPHA_SIZE GL_HISTOGRAM_LUMINANCE_SIZE GL_HISTOGRAM_SINK
+param       params  GLint *
+category    GL_EXT_histogram
+props       get
+chromium    omit
+
+name        GetMinmaxEXT
+return      void
+param       target  GLenum
+paramprop   target  GL_MINMAX
+param       reset   GLboolean
+param       format  GLenum
+paramprop   format  GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type    GLenum
+paramprop   type    GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       values  GLvoid *
+category    GL_EXT_histogram
+props       get
+chromium    omit
+
+name        GetMinmaxParameterfvEXT
+return      void
+param       target  GLenum
+paramprop   target  GL_MINMAX
+param       pname   GLenum
+paramprop   pname   GL_MINMAX_FORMAT GL_MINMAX_SINK
+param       params  GLfloat *
+category    GL_EXT_histogram
+props       get
+chromium    omit
+
+name        GetMinmaxParameterivEXT
+return      void
+param       target  GLenum
+paramprop   target  GL_MINMAX
+param       pname   GLenum
+paramprop   pname   GL_MINMAX_FORMAT GL_MINMAX_SINK
+param       params  GLint *
+category    GL_EXT_histogram
+props       get
+chromium    omit
+
+name        HistogramEXT
+alias       Histogram
+return      void
+param       target      GLenum
+paramprop   target  GL_HISTOGRAM GL_PROXY_HISTOGRAM
+param       width       GLsizei
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       sink        GLboolean
+category    GL_EXT_histogram
+chromium    omit checklist
+
+name        MinmaxEXT
+alias       Minmax
+return      void
+param       target      GLenum
+paramprop   target  GL_MINMAX
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       sink        GLboolean
+category    GL_EXT_histogram
+chromium    omit
+
+name        ResetHistogramEXT
+alias       ResetHistogram
+return      void
+param       target      GLenum
+paramprop   target  GL_HISTOGRAM
+category    GL_EXT_histogram
+chromium    omit
+
+name        ResetMinmaxEXT
+alias       ResetMinmax
+return      void
+param       target      GLenum
+paramprop   target  GL_MINMAX
+category    GL_EXT_histogram
+chromium    omit
+
+name        ConvolutionFilter1DEXT
+alias       ConvolutionFilter1D
+return      void
+param       target      GLenum
+paramprop   target  GL_CONVOLUTION_1D
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_INTENSITY GL_RGB GL_RGBA
+param       width       GLsizei
+param       format      GLenum
+paramprop   format  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       type        GLenum
+paramprop   type    GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       image       const GLvoid *
+category    GL_EXT_convolution
+chromium    omit
+
+name        ConvolutionFilter2DEXT
+alias       ConvolutionFilter2D
+return      void
+param       target      GLenum
+paramprop   target  GL_CONVOLUTION_2D
+param       internalFormat  GLenum
+paramprop   internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       width       GLsizei
+param       height      GLsizei
+param       format      GLenum
+paramprop   format  GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT
+param       image       const GLvoid *
+category    GL_EXT_convolution
+chromium    omit
+
+name        ConvolutionParameterfEXT
+alias       ConvolutionParameterf
+return      void
+param       target      GLenum
+paramprop   target  GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname       GLenum
+paramprop   pname   GL_CONVOLUTION_BORDER_MODE
+param       params      GLfloat
+category    GL_EXT_convolution
+chromium    omit
+
+name        ConvolutionParameterfvEXT
+alias       ConvolutionParameterfv
+return      void
+param       target      GLenum
+paramprop   target      GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname       GLenum
+paramprop   pname   GL_CONVOLUTION_BORDER_MODE GL_CONVOLUTION_BORDER_COLOR GL_CONVOLUTION_FILTER_SCALE GL_CONVOLUTION_FILTER_BIAS
+param       params      const GLfloat *
+category    GL_EXT_convolution
+chromium    omit
+
+name        ConvolutionParameteriEXT
+alias       ConvolutionParameteri
+return      void
+param       target      GLenum
+paramprop   target  GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname       GLenum
+paramprop       pname           GL_CONVOLUTION_BORDER_MODE
+param       params      GLint
+category    GL_EXT_convolution
+chromium    omit
+
+name        ConvolutionParameterivEXT
+alias       ConvolutionParameteriv
+return      void
+param       target      GLenum
+paramprop       target          GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname       GLenum
+paramprop       pname           GL_CONVOLUTION_BORDER_MODE GL_CONVOLUTION_BORDER_COLOR GL_CONVOLUTION_FILTER_SCALE GL_CONVOLUTION_FILTER_BIAS
+param       params      const GLint *
+category    GL_EXT_convolution
+chromium    omit
+
+name        CopyConvolutionFilter1DEXT
+alias       CopyConvolutionFilter1D
+return      void
+param       target      GLenum
+paramprop       target          GL_CONVOLUTION_1D
+param       internalFormat  GLenum
+paramprop       internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+category    GL_EXT_convolution
+chromium    omit
+
+name        CopyConvolutionFilter2DEXT
+alias       CopyConvolutionFilter2D
+return      void
+param       target      GLenum
+paramprop       target          GL_CONVOLUTION_2D
+param       internalFormat  GLenum
+paramprop       internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+param       height      GLsizei
+category    GL_EXT_convolution
+chromium    omit
+
+name        GetConvolutionFilterEXT
+return      void
+param       target  GLenum
+paramprop       target          GL_CONVOLUTION_2D GL_CONVOLUTION_1D
+param       format  GLenum
+paramprop       format          GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type    GLenum
+paramprop       type            GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       image   GLvoid *
+category    GL_EXT_convolution
+props       get
+chromium    omit
+
+name        GetConvolutionParameterfvEXT
+return      void
+param       target  GLenum
+paramprop       target          GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname   GLenum
+paramprop       pname           GL_CONVOLUTION_BORDER_MODE GL_CONVOLUTION_BORDER_COLOR GL_CONVOLUTION_FILTER_SCALE GL_CONVOLUTION_FILTER_BIAS GL_CONVOLUTION_FORMAT GL_CONVOLUTION_WIDTH GL_CONVOLUTION_HEIGHT GL_MAX_CONVOLUTION_WIDTH GL_MAX_CONVOLUTION_HEIGHT
+param       params  GLfloat *
+category    GL_EXT_convolution
+props       get
+chromium    omit
+
+name        GetConvolutionParameterivEXT
+return      void
+param       target  GLenum
+paramprop       target          GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D
+param       pname   GLenum
+paramprop       pname           GL_CONVOLUTION_BORDER_MODE GL_CONVOLUTION_BORDER_COLOR GL_CONVOLUTION_FILTER_SCALE GL_CONVOLUTION_FILTER_BIAS GL_CONVOLUTION_FORMAT GL_CONVOLUTION_WIDTH GL_CONVOLUTION_HEIGHT GL_MAX_CONVOLUTION_WIDTH GL_MAX_CONVOLUTION_HEIGHT
+param       params  GLint *
+category    GL_EXT_convolution
+props       get
+chromium    omit
+
+name        GetSeparableFilterEXT
+return      void
+param       target  GLenum
+paramprop       target          GL_SEPARABLE_2D
+param       format  GLenum
+paramprop       format          GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR   GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type    GLenum
+paramprop       type            GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       row GLvoid *
+param       column  GLvoid *
+param       span    GLvoid *
+category    GL_EXT_convolution
+props       get
+chromium    omit
+
+name        SeparableFilter2DEXT
+alias       SeparableFilter2D
+return      void
+param       target      GLenum
+paramprop       target          GL_SEPARABLE_2D
+param       internalFormat  GLenum
+paramprop       internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       width       GLsizei
+param       height      GLsizei
+param       format      GLenum
+paramprop       format          GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR   GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type        GLenum
+paramprop       type            GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       row     const GLvoid *
+param       column      const GLvoid *
+category    GL_EXT_convolution
+chromium    omit
+
+
+# GL_EXT_texture_object
+
+name        AreTexturesResidentEXT
+return      GLboolean
+param       n       GLsizei
+param       textures    const GLuint *
+param       residences  GLboolean *
+category    GL_EXT_texture_object
+alias       AreTexturesResident
+props       get
+chromium    nopack serverdependent
+
+name        BindTextureEXT
+return      void
+param       target      GLenum
+paramprop   target      GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D
+param       texture     GLuint
+category    GL_EXT_texture_object
+alias       BindTexture
+
+name        DeleteTexturesEXT
+return      void
+param       n       GLsizei
+param       textures    const GLuint *
+category    GL_EXT_texture_object
+alias       DeleteTextures
+props       nolist
+
+name        GenTexturesEXT
+return      void
+param       n       GLsizei
+param       textures    GLuint *
+category    GL_EXT_texture_object
+alias       GenTextures
+props       get
+
+name        IsTextureEXT
+return      GLboolean
+param       texture     GLuint
+category    GL_EXT_texture_object
+alias       IsTexture
+props       get
+
+name        PrioritizeTexturesEXT
+return      void
+param       n       GLsizei
+param       textures    const GLuint *
+param       priorities  const GLclampf *
+category    GL_EXT_texture_object
+alias       PrioritizeTextures
+
+
+# GL_EXT_vertex_array
+
+name        ArrayElementEXT
+return      void
+param       i       GLint
+category    GL_EXT_vertex_array
+alias       ArrayElement
+chromium    omit
+
+name        ColorPointerEXT
+return      void
+param       size        GLint
+param       type        GLenum
+paramprop   type        GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+param       count       GLsizei
+param       pointer     const GLvoid *
+category    GL_EXT_vertex_array
+props       setclient
+chromium    omit
+
+name        DrawArraysEXT
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES GL_QUAD_STRIP GL_QUADS GL_POLYGON
+param       first       GLint
+param       count       GLsizei
+category    GL_EXT_vertex_array
+alias       DrawArrays
+props       useclient
+chromium    omit
+
+name        EdgeFlagPointerEXT
+return      void
+param       stride      GLsizei
+param       count       GLsizei
+param       pointer     const GLboolean *
+category    GL_EXT_vertex_array
+props       setclient
+chromium    omit
+
+name        GetPointervEXT
+return      void
+param       pname       GLenum
+paramprop   pname       GL_COLOR_ARRAY_POINTER GL_EDGE_FLAG_ARRAY_POINTER GL_FEEDBACK_BUFFER_POINTER GL_INDEX_ARRAY_POINTER GL_NORMAL_ARRAY_POINTER GL_TEXTURE_COORD_ARRAY_POINTER GL_SELECTION_BUFFER_POINTER GL_VERTEX_ARRAY_POINTER
+param       params      GLvoid **
+category    GL_EXT_vertex_array
+alias       GetPointerv
+props       useclient get
+chromium    omit
+
+name        IndexPointerEXT
+return      void
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_SHORT GL_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+param       count       GLsizei
+param       pointer     const GLvoid *
+category    GL_EXT_vertex_array
+props       setclient
+chromium    omit
+
+name        NormalPointerEXT
+return      void
+param       type        GLenum
+paramprop   type        GL_BYTE GL_SHORT GL_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+param       count       GLsizei
+param       pointer     const GLvoid *
+category    GL_EXT_vertex_array
+props       setclient
+chromium    omit
+
+name        TexCoordPointerEXT
+return      void
+param       size        GLint
+param       type        GLenum
+paramprop   type        GL_BYTE GL_SHORT GL_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+param       count       GLsizei
+param       pointer     const GLvoid *
+category    GL_EXT_vertex_array
+props       setclient
+chromium    omit
+
+name        VertexPointerEXT
+return      void
+param       size        GLint
+param       type        GLenum
+paramprop   type        GL_BYTE GL_SHORT GL_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+param       count       GLsizei
+param       pointer     const GLvoid *
+category    GL_EXT_vertex_array
+props       setclient
+chromium    omit
+
+
+# GL_ARB_point_parameters
+
+name        PointParameterfARB
+return      void
+param       pname       GLenum
+paramprop   pname       GL_POINT_SIZE_MIN_ARB GL_POINT_SIZE_MAX_ARB GL_POINT_FADE_THRESHOLD_SIZE_ARB
+param       param       GLfloat
+category    GL_ARB_point_parameters
+chromium    extpack
+
+name        PointParameterfvARB
+return      void
+param       pname       GLenum
+paramprop   pname       GL_POINT_SIZE_MIN_ARB GL_POINT_SIZE_MAX_ARB GL_POINT_FADE_THRESHOLD_SIZE_ARB GL_POINT_DISTANCE_ATTENUATION_ARB
+param       params      const GLfloat *
+category    GL_ARB_point_parameters
+chromium    extpack
+
+
+# GL_EXT_color_subtable
+
+name        ColorSubTableEXT
+return      void
+param       target      GLenum
+paramprop       target          GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE
+param       start       GLsizei
+param       count       GLsizei
+param       format      GLenum
+paramprop       format          GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA
+param       type        GLenum
+paramprop       type            GL_UNSIGNED_BYTE GL_BYTE GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       data        const GLvoid *
+category    GL_EXT_color_subtable
+alias       ColorSubTable
+chromium    omit
+
+name        CopyColorSubTableEXT
+return      void
+param       target      GLenum
+paramprop       target          GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE
+param       start       GLsizei
+param       x       GLint
+param       y       GLint
+param       width       GLsizei
+category    GL_EXT_color_subtable
+alias       CopyColorSubTable
+chromium    omit
+
+
+# GL_EXT_paletted_texture
+
+name        ColorTableEXT
+return      void
+param       target      GLenum
+paramprop       target          GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_PROXY_COLOR_TABLE GL_PROXY_POST_CONVOLUTION_COLOR_TABLE GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE
+param       internalFormat  GLenum
+paramprop       internalFormat  GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16
+param       width       GLsizei
+param       format      GLenum
+paramprop       format          GL_COLOR_INDEX GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA GL_LUMINANCE GL_LUMINANCE_ALPHA
+param       type        GLenum
+paramprop       type            GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_2_BYTES GL_3_BYTES GL_4_BYTES
+param       table       const GLvoid *
+category    GL_EXT_paletted_texture
+alias       ColorTable
+chromium    omit checklist
+
+name        GetColorTableEXT
+return      void
+param       target      GLenum
+paramprop       target          GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE
+param       format      GLenum
+paramprop       format           GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_RGB GL_BGR GL_RGBA GL_BGRA
+param       type        GLenum
+paramprop       type            GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV
+param       data        GLvoid *
+category    GL_EXT_paletted_texture
+props       get
+chromium    omit
+
+name        GetColorTableParameterivEXT
+return      void
+param       target      GLenum
+paramprop       target          GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_PROXY_COLOR_TABLE GL_PROXY_POST_CONVOLUTION_COLOR_TABLE GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE
+param       pname       GLenum
+paramprop       pname           GL_COLOR_TABLE_BIAS GL_COLOR_TABLE_SCALE GL_COLOR_TABLE_FORMAT GL_COLOR_TABLE_WIDTH GL_COLOR_TABLE_RED_SIZE GL_COLOR_TABLE_GREEN_SIZE GL_COLOR_TABLE_BLUE_SIZE GL_COLOR_TABLE_ALPHA_SIZE GL_COLOR_TABLE_LUMINANCE_SIZE GL_COLOR_TABLE_INTENSITY_SIZE
+param       params      GLint *
+category    GL_EXT_paletted_texture
+props       get
+chromium    omit
+
+name        GetColorTableParameterfvEXT
+return      void
+param       target      GLenum
+paramprop       target          GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_PROXY_COLOR_TABLE GL_PROXY_POST_CONVOLUTION_COLOR_TABLE GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE
+param       pname       GLenum
+paramprop       pname           GL_COLOR_TABLE_BIAS GL_COLOR_TABLE_SCALE GL_COLOR_TABLE_FORMAT GL_COLOR_TABLE_WIDTH GL_COLOR_TABLE_RED_SIZE GL_COLOR_TABLE_GREEN_SIZE GL_COLOR_TABLE_BLUE_SIZE GL_COLOR_TABLE_ALPHA_SIZE GL_COLOR_TABLE_LUMINANCE_SIZE GL_COLOR_TABLE_INTENSITY_SIZE
+param       params      GLfloat *
+category    GL_EXT_paletted_texture
+props       get
+chromium    omit
+
+
+# GL_EXT_draw_range_elements
+
+name        DrawRangeElementsEXT
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES GL_QUAD_STRIP GL_QUADS GL_POLYGON
+param       start       GLuint
+paramlist   start       0
+param       end     GLuint
+paramlist   end     10
+param       count       GLsizei
+paramlist   count       10
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT GL_UNSIGNED_INT
+param       indices     const GLvoid *
+category    GL_EXT_draw_range_elements
+alias       DrawRangeElements
+
+
+# GL_EXT_secondary_color
+
+name        SecondaryColor3bEXT
+return      void
+param       red     GLbyte
+param       green       GLbyte
+param       blue        GLbyte
+category    GL_EXT_secondary_color
+chromium    pack
+props       pervertex
+
+name        SecondaryColor3bvEXT
+return      void
+param       v       const GLbyte *
+paramvec    v       2 2 2
+vector      v       3
+category    GL_EXT_secondary_color
+vectoralias SecondaryColor3bEXT
+props       pervertex
+
+name        SecondaryColor3dEXT
+return      void
+param       red     GLdouble
+param       green       GLdouble
+param       blue        GLdouble
+category    GL_EXT_secondary_color
+chromium    pack
+props       pervertex
+
+name        SecondaryColor3dvEXT
+return      void
+param       v       const GLdouble *
+paramvec    v       2.0 2.0 2.0
+vector      v       3
+category    GL_EXT_secondary_color
+vectoralias SecondaryColor3dEXT
+props       pervertex
+
+name        SecondaryColor3fEXT
+return      void
+param       red     GLfloat
+param       green       GLfloat
+param       blue        GLfloat
+category    GL_EXT_secondary_color
+chromium    pack
+props       pervertex
+
+name        SecondaryColor3fvEXT
+return      void
+param       v       const GLfloat *
+paramvec    v       2.0 2.0 2.0
+vector      v       3
+category    GL_EXT_secondary_color
+vectoralias SecondaryColor3fEXT
+props       pervertex
+
+name        SecondaryColor3iEXT
+return      void
+param       red     GLint
+param       green       GLint
+param       blue        GLint
+category    GL_EXT_secondary_color
+chromium    pack
+props       pervertex
+
+name        SecondaryColor3ivEXT
+return      void
+param       v       const GLint *
+paramvec    v       2 2 2
+vector      v       3
+category    GL_EXT_secondary_color
+vectoralias SecondaryColor3iEXT
+props       pervertex
+
+name        SecondaryColor3sEXT
+return      void
+param       red     GLshort
+param       green       GLshort
+param       blue        GLshort
+category    GL_EXT_secondary_color
+chromium    pack
+props       pervertex
+
+name        SecondaryColor3svEXT
+return      void
+param       v       const GLshort *
+paramvec    v       2 2 2
+vector      v       3
+category    GL_EXT_secondary_color
+vectoralias SecondaryColor3sEXT
+props       pervertex
+
+name        SecondaryColor3ubEXT
+return      void
+param       red     GLubyte
+param       green       GLubyte
+param       blue        GLubyte
+category    GL_EXT_secondary_color
+chromium    pack
+props       pervertex
+
+name        SecondaryColor3ubvEXT
+return      void
+param       v       const GLubyte *
+paramvec    v       2 2 2
+vector      v       3
+category    GL_EXT_secondary_color
+vectoralias SecondaryColor3ubEXT
+props       pervertex
+
+name        SecondaryColor3uiEXT
+return      void
+param       red     GLuint
+param       green       GLuint
+param       blue        GLuint
+category    GL_EXT_secondary_color
+chromium    pack
+props       pervertex
+
+name        SecondaryColor3uivEXT
+return      void
+param       v       const GLuint *
+paramvec    v       2 2 2
+vector      v       3
+category    GL_EXT_secondary_color
+vectoralias SecondaryColor3uiEXT
+props       pervertex
+
+name        SecondaryColor3usEXT
+return      void
+param       red     GLushort
+param       green       GLushort
+param       blue        GLushort
+category    GL_EXT_secondary_color
+chromium    pack
+props       pervertex
+
+name        SecondaryColor3usvEXT
+return      void
+param       v       const GLushort *
+paramvec    v       2 2 2
+vector      v       3
+category    GL_EXT_secondary_color
+vectoralias SecondaryColor3usEXT
+props       pervertex
+
+name        SecondaryColorPointerEXT
+return      void
+param       size        GLint
+paramlist   size        3 4
+param       type        GLenum
+paramprop   type        GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+paramlist   stride      0
+param       pointer     const GLvoid *
+category    GL_EXT_secondary_color
+props       setclient
+chromium    extpack
+
+
+
+name        MultiDrawArraysEXT
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES GL_QUAD_STRIP GL_QUADS GL_POLYGON
+param       first       GLint *
+param       count       GLsizei *
+param       primcount   GLsizei
+category    GL_EXT_multi_draw_arrays
+props       useclient
+chromium    expandpack  
+
+name        MultiDrawElementsEXT
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES GL_QUAD_STRIP GL_QUADS GL_POLYGON
+param       count       const GLsizei *
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT GL_UNSIGNED_INT
+param       indices     const GLvoid **
+param       primcount   GLsizei
+category    GL_EXT_multi_draw_arrays
+props       useclient
+chromium    expandpack
+
+
+# GL_EXT_fog_coord
+
+name        FogCoordfEXT
+return      void
+param       coord       GLfloat
+paramlist   coord       1.0
+category    GL_EXT_fog_coord
+props       pervertex
+chromium    pack
+
+name        FogCoordfvEXT
+return      void
+param       coord       const GLfloat *
+paramvec    coord       1.0
+vector      coord       1
+category    GL_EXT_fog_coord
+props       pervertex
+vectoralias FogCoordfEXT
+
+name        FogCoorddEXT
+return      void
+param       coord       GLdouble
+paramlist   coord       1.0
+category    GL_EXT_fog_coord
+props       pervertex
+chromium    pack
+
+name        FogCoorddvEXT
+return      void
+param       coord       const GLdouble *
+paramvec    coord       1.0
+vector      coord       1
+category    GL_EXT_fog_coord
+props       pervertex
+vectoralias FogCoorddEXT
+
+name        FogCoordPointerEXT
+return      void
+param       type        GLenum
+paramprop   type        GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+param       pointer     const GLvoid *
+category    GL_EXT_fog_coord
+props       setclient
+chromium    extpack
+
+
+# GL_EXT_blend_func_separate
+
+name        BlendFuncSeparateEXT
+return      void
+param       sfactorRGB  GLenum
+paramprop   sfactorRGB  GL_ZERO GL_ONE GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_CONSTANT_COLOR GL_ONE_MINUS_CONSTANT_COLOR GL_CONSTANT_ALPHA GL_ONE_MINUS_CONSTANT_ALPHA GL_SRC_ALPHA_SATURATE
+param       dfactorRGB  GLenum
+paramprop   dfactorRGB  GL_ZERO GL_ONE GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_CONSTANT_COLOR GL_ONE_MINUS_CONSTANT_COLOR GL_CONSTANT_ALPHA GL_ONE_MINUS_CONSTANT_ALPHA
+param       sfactorA    GLenum
+paramprop   sfactorA    GL_ZERO GL_ONE GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_CONSTANT_COLOR GL_ONE_MINUS_CONSTANT_COLOR GL_CONSTANT_ALPHA GL_ONE_MINUS_CONSTANT_ALPHA GL_SRC_ALPHA_SATURATE
+param       dfactorA    GLenum
+paramprop   dfactorA    GL_ZERO GL_ONE GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_CONSTANT_COLOR GL_ONE_MINUS_CONSTANT_COLOR GL_CONSTANT_ALPHA GL_ONE_MINUS_CONSTANT_ALPHA
+category    GL_EXT_blend_func_separate
+chromium    extpack
+
+
+# GL_NV_vertex_array_range
+
+name        FlushVertexArrayRangeNV
+return      void
+category    GL_NV_vertex_array_range
+props       setclient nolist
+chromium    extpack
+
+name        VertexArrayRangeNV
+return      void
+param       length      GLsizei
+param       pointer     const GLvoid *
+category    GL_NV_vertex_array_range
+props       setclient nolist
+chromium    extpack
+
+
+# GL_NV_register_combiners
+
+name        CombinerParameterfvNV
+return      void
+param       pname           GLenum
+paramprop   pname           GL_CONSTANT_COLOR0_NV GL_CONSTANT_COLOR1_NV
+param       params          const GLfloat *
+category    GL_NV_register_combiners
+chromium    extpack
+
+name        CombinerParameterfNV
+return      void
+param       pname           GLenum
+paramprop   pname           GL_NUM_GENERAL_COMBINERS_NV GL_COLOR_SUM_CLAMP_NV
+param       param           GLfloat
+category    GL_NV_register_combiners
+chromium    extpack
+
+name        CombinerParameterivNV
+return      void
+param       pname           GLenum
+paramprop   pname           GL_NUM_GENERAL_COMBINERS_NV GL_COLOR_SUM_CLAMP_NV
+param       params          const GLint *
+category    GL_NV_register_combiners
+chromium    extpack
+
+name        CombinerParameteriNV
+return      void
+param       pname           GLenum
+paramprop   pname           GL_NUM_GENERAL_COMBINERS_NV GL_COLOR_SUM_CLAMP_NV
+param       param           GLint
+category    GL_NV_register_combiners
+chromium    extpack
+
+name        CombinerInputNV
+return      void
+param       stage           GLenum
+param       portion         GLenum
+param       variable        GLenum
+param       input           GLenum
+param       mapping         GLenum
+param       componentUsage      GLenum
+paramset    [ stage portion variable input mapping componentUsage ] [ GL_COMBINER0_NV GL_COMBINER1_NV GL_COMBINER2_NV GL_COMBINER3_NV GL_COMBINER4_NV GL_COMBINER5_NV GL_COMBINER6_NV GL_COMBINER7_NV ] [ GL_ALPHA ] [ GL_VARIABLE_A_NV GL_VARIABLE_B_NV GL_VARIABLE_C_NV GL_VARIABLE_D_NV ] [ GL_ZERO GL_CONSTANT_COLOR0_NV GL_CONSTANT_COLOR1_NV GL_PRIMARY_COLOR_NV GL_SECONDARY_COLOR_NV GL_SPARE0_NV GL_SPARE1_NV GL_TEXTURE0_ARB GL_TEXTURE1_ARB ] [ GL_UNSIGNED_IDENTITY_NV GL_UNSIGNED_INVERT_NV GL_EXPAND_NORMAL_NV GL_EXPAND_NEGATE_NV GL_HALF_BIAS_NORMAL_NV GL_HALF_BIAS_NEGATE_NV GL_SIGNED_IDENTITY_NV GL_SIGNED_NEGATE_NV ] [ GL_ALPHA ]
+paramset    [ stage portion input componentUsage ]  [ GL_COMBINER0_NV GL_COMBINER1_NV GL_COMBINER2_NV GL_COMBINER3_NV GL_COMBINER4_NV GL_COMBINER5_NV GL_COMBINER6_NV GL_COMBINER7_NV ] [ GL_RGB ] [ GL_VARIABLE_A_NV GL_VARIABLE_B_NV GL_VARIABLE_C_NV GL_VARIABLE_D_NV ] [ GL_ZERO GL_CONSTANT_COLOR0_NV GL_CONSTANT_COLOR1_NV GL_FOG GL_PRIMARY_COLOR_NV GL_SECONDARY_COLOR_NV GL_SPARE0_NV GL_SPARE1_NV GL_TEXTURE0_ARB GL_TEXTURE1_ARB ] [ GL_UNSIGNED_IDENTITY_NV GL_UNSIGNED_INVERT_NV GL_EXPAND_NORMAL_NV GL_EXPAND_NEGATE_NV GL_HALF_BIAS_NORMAL_NV GL_HALF_BIAS_NEGATE_NV GL_SIGNED_IDENTITY_NV GL_SIGNED_NEGATE_NV ] [ GL_RGB ]
+category    GL_NV_register_combiners
+chromium    extpack
+
+name        CombinerOutputNV
+return      void
+param       stage           GLenum
+paramprop   stage           GL_COMBINER0_NV GL_COMBINER1_NV GL_COMBINER2_NV GL_COMBINER3_NV GL_COMBINER4_NV GL_COMBINER5_NV GL_COMBINER6_NV GL_COMBINER7_NV
+param       portion         GLenum
+paramset    [ portion abDotProduct cdDotProduct ] [ GL_ALPHA ] [ GL_FALSE ] [ GL_FALSE ]
+paramset    [ portion abDotProduct cdDotProduct ] [ GL_RGB ] [ GL_FALSE ] [ GL_FALSE ]
+paramset    [ portion abDotProduct cdDotProduct sumOutput ] [ GL_RGB ] [ GL_TRUE ] [ GL_TRUE ] [ GL_DISCARD_NV ]
+paramset    [ portion abDotProduct cdDotProduct sumOutput ] [ GL_RGB ] [ GL_FALSE ] [ GL_TRUE ] [ GL_DISCARD_NV ]
+paramset    [ portion abDotProduct cdDotProduct sumOutput ] [ GL_RGB ] [ GL_TRUE ] [ GL_FALSE ] [ GL_DISCARD_NV ]
+paramset    [ portion abDotProduct cdDotProduct sumOutput ] [ GL_RGB ] [ GL_FALSE ] [ GL_FALSE ] [ GL_PRIMARY_COLOR_NV GL_SECONDARY_COLOR_NV GL_SPARE0_NV GL_SPARE1_NV GL_TEXTURE0_ARB GL_TEXTURE1_ARB ]
+param       abOutput        GLenum
+paramprop   abOutput        GL_DISCARD_NV GL_PRIMARY_COLOR_NV GL_SECONDARY_COLOR_NV GL_SPARE0_NV GL_SPARE1_NV GL_TEXTURE0_ARB GL_TEXTURE1_ARB
+param       cdOutput        GLenum
+paramprop   cdOutput        GL_DISCARD_NV GL_PRIMARY_COLOR_NV GL_SECONDARY_COLOR_NV GL_SPARE0_NV GL_SPARE1_NV GL_TEXTURE0_ARB GL_TEXTURE1_ARB
+param       sumOutput       GLenum
+param       scale           GLenum
+paramprop   scale           GL_NONE GL_SCALE_BY_TWO_NV GL_SCALE_BY_FOUR_NV GL_SCALE_BY_ONE_HALF_NV
+param       bias            GLenum
+paramprop   bias            GL_NONE GL_BIAS_BY_NEGATIVE_ONE_HALF_NV
+param       abDotProduct        GLboolean
+param       cdDotProduct        GLboolean
+param       muxSum          GLboolean
+category    GL_NV_register_combiners
+chromium    extpack
+
+# variable GL_VARIABLE_G_NV works only with GL_BLUE
+name        FinalCombinerInputNV
+return      void
+param       variable        GLenum
+paramprop   variable        GL_VARIABLE_A_NV GL_VARIABLE_B_NV GL_VARIABLE_C_NV GL_VARIABLE_D_NV GL_VARIABLE_E_NV GL_VARIABLE_F_NV
+param       input           GLenum
+paramprop   input           GL_ZERO GL_CONSTANT_COLOR0_NV GL_CONSTANT_COLOR1_NV GL_FOG GL_PRIMARY_COLOR_NV GL_SECONDARY_COLOR_NV GL_SPARE0_NV GL_SPARE1_NV GL_TEXTURE0_ARB GL_TEXTURE1_ARB
+param       mapping         GLenum
+paramprop       mapping         GL_UNSIGNED_IDENTITY_NV GL_UNSIGNED_INVERT_NV
+param       componentUsage      GLenum
+paramprop   componentUsage      GL_RGB GL_ALPHA
+category    GL_NV_register_combiners
+chromium    extpack
+
+name        GetCombinerInputParameterfvNV
+return      void
+param       stage           GLenum
+paramprop   stage           GL_COMBINER0_NV GL_COMBINER1_NV GL_COMBINER2_NV GL_COMBINER3_NV GL_COMBINER4_NV GL_COMBINER5_NV GL_COMBINER6_NV GL_COMBINER7_NV
+param       portion         GLenum
+paramprop   portion         GL_RGB GL_ALPHA
+param       variable        GLenum
+paramprop   variable        GL_VARIABLE_A_NV GL_VARIABLE_B_NV GL_VARIABLE_C_NV GL_VARIABLE_D_NV
+param       pname           GLenum
+paramprop   pname           GL_COMBINER_INPUT_NV GL_COMBINER_MAPPING_NV GL_COMBINER_COMPONENT_USAGE_NV
+param       params          GLfloat *
+category    GL_NV_register_combiners
+props       get
+chromium    extpack
+
+name        GetCombinerInputParameterivNV
+return      void
+param       stage           GLenum
+paramprop   stage           GL_COMBINER0_NV GL_COMBINER1_NV GL_COMBINER2_NV GL_COMBINER3_NV GL_COMBINER4_NV GL_COMBINER5_NV GL_COMBINER6_NV GL_COMBINER7_NV
+param       portion         GLenum
+paramprop   portion         GL_RGB GL_ALPHA
+param       variable        GLenum
+paramprop   variable        GL_VARIABLE_A_NV GL_VARIABLE_B_NV GL_VARIABLE_C_NV GL_VARIABLE_D_NV
+param       pname           GLenum
+paramprop   pname           GL_COMBINER_INPUT_NV GL_COMBINER_MAPPING_NV GL_COMBINER_COMPONENT_USAGE_NV
+param       params          GLint *
+category    GL_NV_register_combiners
+props       get
+chromium    extpack
+
+name        GetCombinerOutputParameterfvNV
+return      void
+param       stage           GLenum
+paramprop   stage           GL_COMBINER0_NV GL_COMBINER1_NV GL_COMBINER2_NV GL_COMBINER3_NV GL_COMBINER4_NV GL_COMBINER5_NV GL_COMBINER6_NV GL_COMBINER7_NV
+param       portion         GLenum
+paramprop   portion         GL_RGB GL_ALPHA
+param       pname           GLenum
+paramprop   pname           GL_COMBINER_AB_DOT_PRODUCT_NV GL_COMBINER_CD_DOT_PRODUCT_NV GL_COMBINER_MUX_SUM_NV GL_COMBINER_SCALE_NV GL_COMBINER_BIAS_NV GL_COMBINER_AB_OUTPUT_NV GL_COMBINER_CD_OUTPUT_NV GL_COMBINER_SUM_OUTPUT_NV
+param       params          GLfloat *
+category    GL_NV_register_combiners
+props       get
+chromium    extpack
+
+name        GetCombinerOutputParameterivNV
+return      void
+param       stage           GLenum
+paramprop   stage           GL_COMBINER0_NV GL_COMBINER1_NV GL_COMBINER2_NV GL_COMBINER3_NV GL_COMBINER4_NV GL_COMBINER5_NV GL_COMBINER6_NV GL_COMBINER7_NV
+param       portion         GLenum
+paramprop   portion         GL_RGB GL_ALPHA
+param       pname           GLenum
+paramprop   pname           GL_COMBINER_AB_DOT_PRODUCT_NV GL_COMBINER_CD_DOT_PRODUCT_NV GL_COMBINER_MUX_SUM_NV GL_COMBINER_SCALE_NV GL_COMBINER_BIAS_NV GL_COMBINER_AB_OUTPUT_NV GL_COMBINER_CD_OUTPUT_NV GL_COMBINER_SUM_OUTPUT_NV
+param       params          GLint *
+category    GL_NV_register_combiners
+props       get
+chromium    extpack
+
+name        GetFinalCombinerInputParameterfvNV
+return      void
+param       variable        GLenum
+paramprop   variable        GL_VARIABLE_A_NV GL_VARIABLE_B_NV GL_VARIABLE_C_NV GL_VARIABLE_D_NV GL_VARIABLE_E_NV GL_VARIABLE_F_NV GL_VARIABLE_G_NV
+param       pname           GLenum
+paramprop   pname           GL_COMBINER_INPUT_NV GL_COMBINER_MAPPING_NV GL_COMBINER_COMPONENT_USAGE_NV
+param       params          GLfloat *
+category    GL_NV_register_combiners
+props       get
+chromium    extpack
+
+name        GetFinalCombinerInputParameterivNV
+return      void
+param       variable        GLenum
+paramprop   variable        GL_VARIABLE_A_NV GL_VARIABLE_B_NV GL_VARIABLE_C_NV GL_VARIABLE_D_NV GL_VARIABLE_E_NV GL_VARIABLE_F_NV GL_VARIABLE_G_NV
+param       pname           GLenum
+paramprop   pname           GL_COMBINER_INPUT_NV GL_COMBINER_MAPPING_NV GL_COMBINER_COMPONENT_USAGE_NV
+param       params          GLint *
+category    GL_NV_register_combiners
+props       get
+chromium    extpack
+
+
+
+
+# GL_EXT_multisample
+
+name        SampleMaskEXT
+return      void
+param       value       GLclampf
+param       invert      GLboolean
+category    GL_EXT_multisample
+chromium    stub
+
+name        SamplePatternEXT
+return      void
+param       pattern     GLenum
+paramprop   pattern     GL_1PASS_EXT GL_2PASS_0_EXT GL_2PASS_1_EXT GL_4PASS_0_EXT GL_4PASS_1_EXT GL_4PASS_2_EXT GL_4PASS_3_EXT
+category    GL_EXT_multisample
+chromium    stub
+
+
+# GL_NV_register_combiners2
+
+name        CombinerStageParameterfvNV
+return      void
+param       stage   GLenum
+paramprop   stage           GL_COMBINER0_NV GL_COMBINER1_NV GL_COMBINER2_NV GL_COMBINER3_NV GL_COMBINER4_NV GL_COMBINER5_NV GL_COMBINER6_NV GL_COMBINER7_NV
+param       pname   GLenum
+paramprop   pname   GL_CONSTANT_COLOR0_NV GL_CONSTANT_COLOR1_NV
+param       params  const GLfloat *
+category    GL_NV_register_combiners2
+chromium    extpack
+
+name        GetCombinerStageParameterfvNV
+return      void
+param       stage   GLenum
+paramprop   stage           GL_COMBINER0_NV GL_COMBINER1_NV GL_COMBINER2_NV GL_COMBINER3_NV GL_COMBINER4_NV GL_COMBINER5_NV GL_COMBINER6_NV GL_COMBINER7_NV
+param       pname   GLenum
+paramprop   pname   GL_CONSTANT_COLOR0_NV GL_CONSTANT_COLOR1_NV
+param       params  GLfloat *
+category    GL_NV_register_combiners2
+props       get
+chromium    extpack
+
+
+# GL_ARB_window_pos
+
+name        WindowPos2dARB
+return      void
+param       x   GLdouble
+param       y   GLdouble
+category    GL_ARB_window_pos
+chromium    extpack
+
+name        WindowPos2fARB
+return      void
+param       x   GLfloat
+param       y   GLfloat
+category    GL_ARB_window_pos
+chromium    extpack
+
+name        WindowPos2iARB
+return      void
+param       x   GLint
+param       y   GLint
+category    GL_ARB_window_pos
+chromium    extpack
+
+name        WindowPos2sARB
+return      void
+param       x   GLshort
+param       y   GLshort
+category    GL_ARB_window_pos
+chromium    extpack
+
+name        WindowPos2dvARB
+return      void
+param       v   const GLdouble *
+paramvec    v   1.0 1.0
+vector      v   2
+category    GL_ARB_window_pos
+chromium    extpack
+vectoralias WindowPos2dARB
+
+name        WindowPos2fvARB
+return      void
+param       v   const GLfloat *
+paramvec    v   1.0 1.0
+vector      v   2
+category    GL_ARB_window_pos
+chromium    extpack
+vectoralias WindowPos2fARB
+
+name        WindowPos2ivARB
+return      void
+param       v   const GLint *
+paramvec    v   1 1
+vector      v   2
+category    GL_ARB_window_pos
+chromium    extpack
+vectoralias WindowPos2iARB
+
+name        WindowPos2svARB
+return      void
+param       v   const GLshort *
+paramvec    v   1 1
+vector      v   2
+category    GL_ARB_window_pos
+chromium    extpack
+vectoralias WindowPos2sARB
+
+name        WindowPos3dARB
+return      void
+param       x   GLdouble
+param       y   GLdouble
+param       z   GLdouble
+category    GL_ARB_window_pos
+chromium    extpack
+
+name        WindowPos3fARB
+return      void
+param       x   GLfloat
+param       y   GLfloat
+param       z   GLfloat
+category    GL_ARB_window_pos
+chromium    extpack
+
+name        WindowPos3iARB
+return      void
+param       x   GLint
+param       y   GLint
+param       z   GLint
+category    GL_ARB_window_pos
+chromium    extpack
+
+name        WindowPos3sARB
+return      void
+param       x   GLshort
+param       y   GLshort
+param       z   GLshort
+category    GL_ARB_window_pos
+chromium    extpack
+
+name        WindowPos3dvARB
+return      void
+param       v   const GLdouble *
+paramvec    v   1.0 1.0 1.0
+vector      v   3
+category    GL_ARB_window_pos
+chromium    extpack
+vectoralias WindowPos3dARB
+
+name        WindowPos3fvARB
+return      void
+param       v   const GLfloat *
+paramvec    v   1.0 1.0 1.0
+vector      v   3
+category    GL_ARB_window_pos
+chromium    extpack
+vectoralias WindowPos3fARB
+
+name        WindowPos3ivARB
+return      void
+param       v   const GLint *
+paramvec    v   1 1 1
+vector      v   3
+category    GL_ARB_window_pos
+chromium    extpack
+vectoralias WindowPos3iARB
+
+name        WindowPos3svARB
+return      void
+param       v   const GLshort *
+paramvec    v   1 1 1
+vector      v   3
+category    GL_ARB_window_pos
+chromium    extpack
+vectoralias WindowPos3sARB
+
+
+# OpenGL 1.4
+
+name        BlendFuncSeparate
+alias       BlendFuncSeparateEXT
+return      void
+param       sfactorRGB  GLenum
+paramprop       sfactorRGB      GL_ZERO GL_ONE GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_CONSTANT_COLOR GL_ONE_MINUS_CONSTANT_COLOR GL_CONSTANT_ALPHA GL_ONE_MINUS_CONSTANT_ALPHA GL_SRC_ALPHA_SATURATE
+param       dfactorRGB  GLenum
+paramprop       dfactorRGB      GL_ZERO GL_ONE GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_CONSTANT_COLOR GL_ONE_MINUS_CONSTANT_COLOR GL_CONSTANT_ALPHA GL_ONE_MINUS_CONSTANT_ALPHA
+param       sfactorA    GLenum
+paramprop       sfactorA        GL_ZERO GL_ONE GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_CONSTANT_COLOR GL_ONE_MINUS_CONSTANT_COLOR GL_CONSTANT_ALPHA GL_ONE_MINUS_CONSTANT_ALPHA GL_SRC_ALPHA_SATURATE
+param       dfactorA    GLenum
+paramprop       dfactorA        GL_ZERO GL_ONE GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_CONSTANT_COLOR GL_ONE_MINUS_CONSTANT_COLOR GL_CONSTANT_ALPHA GL_ONE_MINUS_CONSTANT_ALPHA
+category    1.4
+
+name        FogCoordf
+return      void
+param       coord       GLfloat
+category    1.4
+alias       FogCoordfEXT
+
+name        FogCoordfv
+return      void
+param       coord       const GLfloat *
+category    1.4
+alias       FogCoordfvEXT
+
+name        FogCoordd
+return      void
+param       coord       GLdouble
+category    1.4
+alias       FogCoorddEXT
+
+name        FogCoorddv
+return      void
+param       coord       const GLdouble *
+category    1.4
+alias       FogCoorddvEXT
+
+name        FogCoordPointer
+return      void
+param       type        GLenum
+paramprop   type        GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+param       pointer     const GLvoid *
+category    1.4
+alias       FogCoordPointerEXT
+props       setclient
+chromium    nopack
+
+name        MultiDrawArrays
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES GL_QUAD_STRIP GL_QUADS GL_POLYGON
+param       first       GLint *
+param       count       GLsizei *
+param       primcount   GLsizei
+category    1.4
+alias       MultiDrawArraysEXT
+props       useclient
+chromium    expandpack
+
+name        MultiDrawElements
+return      void
+param       mode        GLenum
+paramprop   mode        GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES GL_QUAD_STRIP GL_QUADS GL_POLYGON
+param       count       const GLsizei *
+param       type        GLenum
+paramprop   type        GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT GL_UNSIGNED_INT
+param       indices     const GLvoid **
+param       primcount   GLsizei
+category    1.4
+alias       MultiDrawElementsEXT
+props       useclient
+chromium    expandpack
+
+name          PointParameterfEXT
+return                void
+param         pname           GLenum
+paramprop     pname           GL_POINT_SIZE_MIN_ARB GL_POINT_SIZE_MAX_ARB GL_POINT_FADE_THRESHOLD_SIZE_ARB
+param         param           GLfloat
+category      GL_EXT_point_parameters
+alias         PointParameterfARB
+
+name          PointParameterfvEXT
+return                void
+param         pname           GLenum
+paramprop     pname           GL_POINT_SIZE_MIN_ARB GL_POINT_SIZE_MAX_ARB GL_POINT_FADE_THRESHOLD_SIZE_ARB GL_POINT_DISTANCE_ATTENUATION_ARB
+param         params          const GLfloat *
+category      GL_EXT_point_parameters
+alias         PointParameterfvARB
+
+name        PointParameterf
+return      void
+param       pname       GLenum
+paramprop   pname       GL_POINT_SIZE_MIN_ARB GL_POINT_SIZE_MAX_ARB GL_POINT_FADE_THRESHOLD_SIZE_ARB
+param       param       GLfloat
+category    1.4
+alias       PointParameterfARB
+
+name        PointParameterfv
+return      void
+param       pname       GLenum
+paramprop   pname       GL_POINT_SIZE_MIN_ARB GL_POINT_SIZE_MAX_ARB GL_POINT_FADE_THRESHOLD_SIZE_ARB GL_POINT_DISTANCE_ATTENUATION_ARB
+param       params      const GLfloat *
+category    1.4
+alias       PointParameterfvARB
+
+name        PointParameteri
+return      void
+param       pname       GLenum
+paramprop   pname       GL_POINT_SIZE_MIN_ARB GL_POINT_SIZE_MAX_ARB GL_POINT_FADE_THRESHOLD_SIZE_ARB
+param       param       GLint
+category    1.4
+chromium    extpack
+
+name        PointParameteriv
+return      void
+param       pname       GLenum
+paramprop   pname       GL_POINT_SIZE_MIN_ARB GL_POINT_SIZE_MAX_ARB GL_POINT_FADE_THRESHOLD_SIZE_ARB
+param       param       const GLint *
+category    1.4
+chromium    extpack
+
+name        SecondaryColor3b
+return      void
+param       red     GLbyte
+param       green       GLbyte
+param       blue        GLbyte
+category    1.4
+alias       SecondaryColor3bEXT
+props       pervertex
+
+name        SecondaryColor3bv
+return      void
+param       v       const GLbyte *
+vector      v       3
+category    1.4
+alias       SecondaryColor3bvEXT
+props       pervertex
+
+name        SecondaryColor3d
+return      void
+param       red     GLdouble
+param       green       GLdouble
+param       blue        GLdouble
+category    1.4
+alias       SecondaryColor3dEXT
+props       pervertex
+
+name        SecondaryColor3dv
+return      void
+param       v       const GLdouble *
+vector      v       3
+category    1.4
+alias       SecondaryColor3dvEXT
+props       pervertex
+
+name        SecondaryColor3f
+return      void
+param       red     GLfloat
+param       green       GLfloat
+param       blue        GLfloat
+category    1.4
+alias       SecondaryColor3fEXT
+props       pervertex
+
+name        SecondaryColor3fv
+return      void
+param       v       const GLfloat *
+vector      v       3
+category    1.4
+alias       SecondaryColor3fvEXT
+props       pervertex
+
+name        SecondaryColor3i
+return      void
+param       red     GLint
+param       green       GLint
+param       blue        GLint
+category    1.4
+alias       SecondaryColor3iEXT
+props       pervertex
+
+name        SecondaryColor3iv
+return      void
+param       v       const GLint *
+vector      v       3
+category    1.4
+alias       SecondaryColor3ivEXT
+props       pervertex
+
+name        SecondaryColor3s
+return      void
+param       red     GLshort
+param       green       GLshort
+param       blue        GLshort
+category    1.4
+alias       SecondaryColor3sEXT
+props       pervertex
+
+name        SecondaryColor3sv
+return      void
+param       v       const GLshort *
+vector      v       3
+category    1.4
+alias       SecondaryColor3svEXT
+props       pervertex
+
+name        SecondaryColor3ub
+return      void
+param       red     GLubyte
+param       green       GLubyte
+param       blue        GLubyte
+category    1.4
+alias       SecondaryColor3ubEXT
+props       pervertex
+
+name        SecondaryColor3ubv
+return      void
+param       v       const GLubyte *
+vector      v       3
+category    1.4
+alias       SecondaryColor3ubvEXT
+props       pervertex
+
+name        SecondaryColor3ui
+return      void
+param       red     GLuint
+param       green       GLuint
+param       blue        GLuint
+category    1.4
+alias       SecondaryColor3uiEXT
+props       pervertex
+
+name        SecondaryColor3uiv
+return      void
+param       v       const GLuint *
+vector      v       3
+category    1.4
+alias       SecondaryColor3uivEXT
+props       pervertex
+
+name        SecondaryColor3us
+return      void
+param       red     GLushort
+param       green       GLushort
+param       blue        GLushort
+category    1.4
+alias       SecondaryColor3usEXT
+props       pervertex
+
+name        SecondaryColor3usv
+return      void
+param       v       const GLushort *
+vector      v       3
+category    1.4
+alias       SecondaryColor3usvEXT
+props       pervertex
+
+name        SecondaryColorPointer
+return      void
+param       size        GLint
+paramlist       size            3 4
+param       type        GLenum
+paramprop       type            GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_DOUBLE
+param       stride      GLsizei
+paramlist       stride          0
+param       pointer     const GLvoid *
+category    1.4
+alias       SecondaryColorPointerEXT
+props       setclient
+
+name        WindowPos2d
+return      void
+param       x       GLdouble
+param       y       GLdouble
+category    1.4
+alias       WindowPos2dARB
+chromium    nopack
+
+name        WindowPos2dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0
+vector      v       2
+category    1.4
+alias       WindowPos2dvARB
+chromium    nopack
+
+name        WindowPos2f
+return      void
+param       x       GLfloat
+param       y       GLfloat
+category    1.4
+alias       WindowPos2fARB
+chromium    nopack
+
+name        WindowPos2fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0
+vector      v       2
+category    1.4
+alias       WindowPos2fvARB
+chromium    nopack
+
+name        WindowPos2i
+return      void
+param       x       GLint
+param       y       GLint
+category    1.4
+alias       WindowPos2iARB
+chromium    nopack
+
+name        WindowPos2iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1
+vector      v       2
+category    1.4
+alias       WindowPos2ivARB
+chromium    nopack
+
+name        WindowPos2s
+return      void
+param       x       GLshort
+param       y       GLshort
+category    1.4
+alias       WindowPos2sARB
+chromium    nopack
+
+name        WindowPos2sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1
+vector      v       2
+category    1.4
+alias       WindowPos2svARB
+chromium    nopack
+
+name        WindowPos3d
+return      void
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+category    1.4
+alias       WindowPos3dARB
+chromium    nopack
+
+name        WindowPos3dv
+return      void
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    1.4
+alias       WindowPos3dvARB
+chromium    nopack
+
+name        WindowPos3f
+return      void
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+category    1.4
+alias       WindowPos3fARB
+chromium    nopack
+
+name        WindowPos3fv
+return      void
+param       v       const GLfloat *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    1.4
+alias       WindowPos3fvARB
+chromium    nopack
+
+name        WindowPos3i
+return      void
+param       x       GLint
+param       y       GLint
+param       z       GLint
+category    1.4
+alias       WindowPos3iARB
+chromium    nopack
+
+name        WindowPos3iv
+return      void
+param       v       const GLint *
+paramvec    v       1 1 1
+vector      v       3
+category    1.4
+alias       WindowPos3ivARB
+chromium    nopack
+
+name        WindowPos3s
+return      void
+param       x       GLshort
+param       y       GLshort
+param       z       GLshort
+category    1.4
+alias       WindowPos3sARB
+chromium    nopack
+
+name        WindowPos3sv
+return      void
+param       v       const GLshort *
+paramvec    v       1 1 1
+vector      v       3
+category    1.4
+alias       WindowPos3svARB
+chromium    nopack
+
+
+# GL_NV_point_sprite
+
+name        PointParameteriNV
+return      void
+param       pname       GLenum
+paramprop   pname       GL_POINT_SPRITE_R_MODE_NV
+param       params      GLint
+category    GL_NV_point_sprite
+alias       PointParameteri
+chromium    nopack
+
+name        PointParameterivNV
+return      void
+param       pname       GLenum
+param       params      const GLint *
+paramprop   pname       GL_POINT_SPRITE_R_MODE_NV
+category    GL_NV_point_sprite
+alias       PointParameteriv
+chromium    nopack
+
+
+# GL_EXT_stencil_two_side
+
+name        ActiveStencilFaceEXT
+return      void
+param       face        GLenum
+paramprop   face        GL_FRONT GL_BACK
+category    GL_EXT_stencil_two_side
+chromium    extpack
+
+
+# GL_NV_fence
+
+name        DeleteFencesNV
+return      void
+param       n       GLsizei
+param       fences      const GLuint *
+category    GL_NV_fence
+props       nolist
+chromium    extpack
+
+name        GenFencesNV
+return      void
+param       n       GLsizei
+param       fences      GLuint *
+category    GL_NV_fence
+props       get
+chromium    extpack serverdependent
+
+name        IsFenceNV
+return      GLboolean
+param       fence       GLuint
+category    GL_NV_fence
+props       get 
+chromium    extpack serverdependent
+
+name        TestFenceNV
+return      GLboolean
+param       fence       GLuint
+category    GL_NV_fence
+props       get
+chromium    extpack serverdependent
+
+name        GetFenceivNV
+return      void
+param       fence       GLuint
+param       pname       GLenum
+paramprop   pname       GL_FENCE_STATUS_NV GL_FENCE_CONDITION_NV
+param       params      GLint *
+category    GL_NV_fence
+props       get
+chromium    extpack serverdependent
+
+name        FinishFenceNV
+return      void
+param       fence       GLuint
+category    GL_NV_fence
+props       nolist
+chromium    extpack
+
+name        SetFenceNV
+return      void
+param       fence       GLuint
+param       condition   GLenum
+paramprop   condition   GL_ALL_COMPLETED_NV
+category    GL_NV_fence
+chromium    extpack
+
+
+# GL_ARB_vertex_program
+
+name        VertexAttrib1sARB
+return      void
+param       index       GLuint
+param       x       GLshort
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib1fARB
+return      void
+param       index       GLuint
+param       x       GLfloat
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib1dARB
+return      void
+param       index       GLuint
+param       x       GLdouble
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib2sARB
+return      void
+param       index       GLuint
+param       x       GLshort
+param       y       GLshort
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib2fARB
+return      void
+param       index       GLuint
+param       x       GLfloat
+param       y       GLfloat
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib2dARB
+return      void
+param       index       GLuint
+param       x       GLdouble
+param       y       GLdouble
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib3sARB
+return      void
+param       index       GLuint
+param       x       GLshort
+param       y       GLshort
+param       z       GLshort
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib3fARB
+return      void
+param       index       GLuint
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib3dARB
+return      void
+param       index       GLuint
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4sARB
+return      void
+param       index       GLuint
+param       x       GLshort
+param       y       GLshort
+param       z       GLshort
+param       w       GLshort
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4fARB
+return      void
+param       index       GLuint
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+param       w       GLfloat
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4dARB
+return      void
+param       index       GLuint
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+param       w       GLdouble
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4NubARB
+return      void
+param       index       GLuint
+param       x       GLubyte
+param       y       GLubyte
+param       z       GLubyte
+param       w       GLubyte
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib1svARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLshort *
+paramvec    v       1
+vector      v       1
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib1sARB
+
+name        VertexAttrib1fvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLfloat *
+paramvec    v       1.0
+vector      v       1
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib1fARB
+
+name        VertexAttrib1dvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLdouble *
+paramvec    v       1.0
+vector      v       1
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib1dARB
+
+name        VertexAttrib2svARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLshort *
+paramvec    v       1 1
+vector      v       2
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib2sARB
+
+name        VertexAttrib2fvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLfloat *
+paramvec    v       1.0 1.0
+vector      v       2
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib2fARB
+
+name        VertexAttrib2dvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLdouble *
+paramvec    v       1.0 1.0
+vector      v       2
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib2dARB
+
+name        VertexAttrib3svARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLshort *
+paramvec    v       1 1
+vector      v       3
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib3sARB
+
+name        VertexAttrib3fvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLfloat *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib3fARB
+
+name        VertexAttrib3dvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib3dARB
+
+name        VertexAttrib4bvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLbyte *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4svARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLshort *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib4sARB
+
+name        VertexAttrib4ivARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLint *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4ubvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLubyte *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4usvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLushort *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4uivARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLuint *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4fvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLfloat *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib4fARB
+
+name        VertexAttrib4dvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0 1.0
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+vectoralias VertexAttrib4dARB
+
+name        VertexAttrib4NbvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLbyte *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4NsvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLshort *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4NivARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLint *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4NubvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLubyte *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4NusvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLushort *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttrib4NuivARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLuint *
+paramvec    v       1 1 1 1
+vector      v       4
+category    GL_ARB_vertex_program
+props       pervertex
+chromium    pack
+
+name        VertexAttribPointerARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       size        GLint
+paramlist   size        1 2 3 4
+param       type        GLenum
+paramprop   type        GL_SHORT GL_FLOAT GL_DOUBLE
+param       normalized  GLboolean
+paramlist   normalized  GL_TRUE GL_FALSE
+param       stride      GLsizei
+paramlist   stride      0
+param       pointer     const GLvoid *
+category    GL_ARB_vertex_program
+props       setclient
+chromium    extpack
+
+name        EnableVertexAttribArrayARB
+return      void
+param       index       GLuint
+category    GL_ARB_vertex_program
+props       setclient
+chromium    extpack
+
+name        DisableVertexAttribArrayARB
+return      void
+param       index       GLuint
+category    GL_ARB_vertex_program
+props       setclient
+chromium    extpack
+
+name        ProgramStringARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       format      GLenum
+paramprop   format      GL_PROGRAM_FORMAT_ASCII_ARB
+param       len     GLsizei
+param       string      const GLvoid *
+category    GL_ARB_vertex_program
+chromium    extpack
+
+name        BindProgramARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       program     GLuint
+category    GL_ARB_vertex_program
+chromium    extpack
+
+name        DeleteProgramsARB
+return      void
+param       n       GLsizei
+param       programs    const GLuint *
+category    GL_ARB_vertex_program
+props       nolist
+chromium    extpack
+
+name        GenProgramsARB
+return      void
+param       n       GLsizei
+param       programs    GLuint *
+category    GL_ARB_vertex_program
+props       get
+chromium    extpack serverdependent
+
+name        IsProgramARB
+return      GLboolean
+param       program     GLuint
+category    GL_ARB_vertex_program
+props       get
+chromium    extpack
+
+name        ProgramEnvParameter4dARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+param       w       GLdouble
+category    GL_ARB_vertex_program
+chromium    extpack
+
+name        ProgramEnvParameter4dvARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       params      const GLdouble *
+vector      params      4
+category    GL_ARB_vertex_program
+chromium    extpack
+vectoralias ProgramEnvParameter4dARB
+
+name        ProgramEnvParameter4fARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+param       w       GLfloat
+category    GL_ARB_vertex_program
+chromium    extpack
+
+name        ProgramEnvParameter4fvARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       params      const GLfloat *
+vector      params      4
+category    GL_ARB_vertex_program
+chromium    extpack
+vectoralias ProgramEnvParameter4fARB
+
+name        ProgramLocalParameter4dARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+param       w       GLdouble
+category    GL_ARB_vertex_program
+chromium    extpack
+
+name        ProgramLocalParameter4dvARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       params      const GLdouble *
+vector      params      4
+category    GL_ARB_vertex_program
+chromium    extpack
+vectoralias ProgramLocalParameter4dARB
+
+name        ProgramLocalParameter4fARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+param       w       GLfloat
+category    GL_ARB_vertex_program
+chromium    extpack
+
+name        ProgramLocalParameter4fvARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       params      const GLfloat *
+vector      params      4
+category    GL_ARB_vertex_program
+chromium    extpack
+vectoralias ProgramLocalParameter4fARB
+
+name        GetProgramEnvParameterdvARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       params      GLdouble *
+vector      params      4
+category    GL_ARB_vertex_program
+props       get
+chromium    extpack
+
+name        GetProgramEnvParameterfvARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       params      GLfloat *
+vector      params      4
+category    GL_ARB_vertex_program
+props       get
+chromium    extpack
+
+name        GetProgramLocalParameterdvARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       params      GLdouble *
+vector      params      4
+category    GL_ARB_vertex_program
+props       get
+chromium    extpack
+
+name        GetProgramLocalParameterfvARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       index       GLuint
+param       params      GLfloat *
+vector      params      4
+category    GL_ARB_vertex_program
+props       get
+chromium    extpack
+
+name        GetProgramivARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       pname       GLenum
+param       params      GLint *
+category    GL_ARB_vertex_program
+props       get
+chromium    extpack serverdependent
+
+name        GetProgramStringARB
+return      void
+param       target      GLenum
+paramprop   target      GL_VERTEX_PROGRAM_ARB GL_FRAGMENT_PROGRAM_ARB
+param       pname       GLenum
+paramprop   pname       GL_PROGRAM_STRING_ARB
+param       string      GLvoid *
+category    GL_ARB_vertex_program
+props       get
+chromium    extpack
+
+name        GetVertexAttribdvARB
+return      void
+param       index       GLuint
+paramlist   index       1 2 3 4 5 6 7
+param       pname       GLenum
+paramprop   pname       GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB GL_CURRENT_VERTEX_ATTRIB_ARB
+param       params      GLdouble *
+paramvec    params      0.0 0.0 0.0 0.0
+vector      params      4
+category    GL_ARB_vertex_program
+props       get
+chromium    extpack
+
+name        GetVertexAttribfvARB
+return      void
+param       index       GLuint
+paramlist   index       1 2 3 4 5 6 7
+param       pname       GLenum
+paramprop   pname       GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB GL_CURRENT_VERTEX_ATTRIB_ARB
+param       params      GLfloat *
+paramvec    params      0.0 0.0 0.0 0.0
+vector      params      4
+category    GL_ARB_vertex_program
+props       get
+chromium    extpack
+
+name        GetVertexAttribivARB
+return      void
+param       index       GLuint
+paramlist   index       1 2 3 4 5 6 7
+param       pname       GLenum
+paramprop   pname       GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB GL_CURRENT_VERTEX_ATTRIB_ARB GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB
+param       params      GLint *
+paramvec    params      0 0 0 0
+vector      params      4
+category    GL_ARB_vertex_program
+props       get
+chromium    extpack
+
+name        GetVertexAttribPointervARB
+return      void
+param       index       GLuint
+paramlist   index       1 2 3 4 5 6 7
+param       pname       GLenum
+paramprop   pname       GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB GL_CURRENT_VERTEX_ATTRIB_ARB
+param       pointer     GLvoid **
+category    GL_ARB_vertex_program
+props       useclient get
+chromium    extpack
+
+
+
+# GL_NV_vertex_program
+
+name        AreProgramsResidentNV
+return      GLboolean
+param       n       GLsizei
+param       ids     const GLuint *
+param       residences  GLboolean *
+category    GL_NV_vertex_program
+props       get
+chromium    extpack serverdependent
+
+name        BindProgramNV
+return      void
+param       target  GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV GL_FRAGMENT_PROGRAM_NV
+param       id  GLuint
+category    GL_NV_vertex_program
+chromium    extpack
+
+name        DeleteProgramsNV
+return      void
+param       n   GLsizei
+param       ids const GLuint *
+category    GL_NV_vertex_program
+alias       DeleteProgramsARB
+props       nolist
+chromium    nopack
+
+name        ExecuteProgramNV
+return      void
+param       target  GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV GL_FRAGMENT_PROGRAM_NV
+param       id  GLuint
+param       params  const GLfloat *
+category    GL_NV_vertex_program
+chromium    extpack
+
+name        GenProgramsNV
+return      void
+param       n   GLsizei
+param       ids GLuint *
+category    GL_NV_vertex_program
+props       get
+chromium    extpack serverdependent
+
+name        GetProgramParameterdvNV
+return      void
+param       target  GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV GL_FRAGMENT_PROGRAM_NV
+param       index   GLuint
+param       pname   GLenum
+paramprop   pname   GL_PROGRAM_PARAMETER_NV
+param       params  GLdouble *
+vector      params  4
+category    GL_NV_vertex_program
+props       get
+chromium    extpack
+
+name        GetProgramParameterfvNV
+return      void
+param       target  GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV GL_FRAGMENT_PROGRAM_NV
+param       index   GLuint
+param       pname   GLenum
+paramprop   pname   GL_PROGRAM_PARAMETER_NV
+param       params  GLfloat *
+category    GL_NV_vertex_program
+props       get
+chromium    extpack
+
+name        GetProgramivNV
+return      void
+param       id  GLuint
+param       pname   GLenum
+paramprop   target  GL_PROGRAM_PARAMETER_NV
+param       params  GLint *
+category    GL_NV_vertex_program
+props       get
+chromium    extpack serverdependent
+
+name        GetProgramStringNV
+return      void
+param       id  GLuint
+param       pname   GLenum
+paramprop   pname   GL_PROGRAM_STRING_NV
+param       program GLubyte *
+category    GL_NV_vertex_program
+props       get
+chromium    extpack
+
+name        GetTrackMatrixivNV
+return      void
+param       target  GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV
+param       address GLuint
+paramlist   address 0 4 8 
+param       pname   GLenum
+paramprop   pname   GL_TRACK_MATRIX_NV GL_TRACK_MATRIX_TRANSFORM_NV
+param       params  GLint *
+category    GL_NV_vertex_program
+props       get
+chromium    extpack
+
+name        GetVertexAttribdvNV
+return      void
+param       index   GLuint
+param       pname   GLenum
+paramprop   pname   GL_ATTRIB_ARRAY_SIZE_NV GL_ATTRIB_ARRAY_STRIDE_NV GL_ATTRIB_ARRAY_TYPE_NV GL_CURRENT_ATTRIB_NV
+param       params  GLdouble *
+category    GL_NV_vertex_program
+props       get
+chromium    extpack
+
+name        GetVertexAttribfvNV
+return      void
+param       index   GLuint
+param       pname   GLenum
+paramprop   pname   GL_ATTRIB_ARRAY_SIZE_NV GL_ATTRIB_ARRAY_STRIDE_NV GL_ATTRIB_ARRAY_TYPE_NV GL_CURRENT_ATTRIB_NV
+param       params  GLfloat *
+category    GL_NV_vertex_program
+props       get
+chromium    extpack
+
+name        GetVertexAttribivNV
+return      void
+param       index   GLuint
+param       pname   GLenum
+paramprop   pname   GL_ATTRIB_ARRAY_SIZE_NV GL_ATTRIB_ARRAY_STRIDE_NV GL_ATTRIB_ARRAY_TYPE_NV GL_CURRENT_ATTRIB_NV
+param       params  GLint *
+category    GL_NV_vertex_program
+props       get
+chromium    extpack
+
+name        GetVertexAttribPointervNV
+return      void
+param       index       GLuint
+param       pname       GLenum
+paramprop   pname       GL_ATTRIB_ARRAY_POINTER_NV
+param       pointer     GLvoid **
+category    GL_NV_vertex_program
+props       get useclient
+chromium    extpack
+
+name        IsProgramNV
+return      GLboolean
+param       id  GLuint
+category    GL_NV_vertex_program
+props       get
+alias       IsProgramARB
+chromium    nopack
+
+name        LoadProgramNV
+return      void
+param       target      GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV GL_FRAGMENT_PROGRAM_NV
+param       id      GLuint
+param       len     GLsizei
+param       program     const GLubyte *
+category    GL_NV_vertex_program
+chromium    extpack
+
+name        ProgramParameter4dNV
+return      void
+param       target  GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV GL_FRAGMENT_PROGRAM_NV
+param       index   GLuint
+param       x   GLdouble
+param       y   GLdouble
+param       z   GLdouble
+param       w   GLdouble
+category    GL_NV_vertex_program
+chromium    extpack
+
+name        ProgramParameter4dvNV
+return      void
+param       target      GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV GL_FRAGMENT_PROGRAM_NV
+param       index       GLuint
+param       params      const GLdouble *
+vector      params      4
+category    GL_NV_vertex_program
+chromium    extpack
+vectoralias ProgramParameter4dNV
+
+name        ProgramParameter4fNV
+return      void
+param       target  GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV GL_FRAGMENT_PROGRAM_NV
+param       index   GLuint
+param       x   GLfloat
+param       y   GLfloat
+param       z   GLfloat
+param       w   GLfloat
+category    GL_NV_vertex_program
+chromium    extpack
+
+name        ProgramParameter4fvNV
+return      void
+param       target      GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV GL_FRAGMENT_PROGRAM_NV
+param       index       GLuint
+param       params      const GLfloat *
+vector      params      4
+category    GL_NV_vertex_program
+chromium    extpack
+vectoralias ProgramParameter4fNV
+
+name        ProgramParameters4dvNV
+return      void
+param       target      GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV GL_FRAGMENT_PROGRAM_NV
+param       index       GLuint
+param       num     GLuint
+param       params      const GLdouble *
+vector      params      4
+category    GL_NV_vertex_program
+chromium    extpack
+
+name        ProgramParameters4fvNV
+return      void
+param       target      GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV GL_FRAGMENT_PROGRAM_NV
+param       index       GLuint
+param       num     GLuint
+param       params      const GLfloat *
+vector      params      4
+category    GL_NV_vertex_program
+chromium    extpack
+
+name        RequestResidentProgramsNV
+return      void
+param       n   GLsizei
+param       ids const GLuint *
+category    GL_NV_vertex_program
+chromium    extpack
+
+name        TrackMatrixNV
+return      void
+param       target      GLenum
+paramprop   target  GL_VERTEX_PROGRAM_NV
+param       address     GLuint
+paramlist   address 0 4 8 
+param       matrix      GLenum
+paramprop   matrix      GL_NONE GL_MODELVIEW GL_PROJECTION GL_TEXTURE GL_COLOR GL_MODELVIEW_PROJECTION_NV GL_TEXTURE0_ARB GL_TEXTURE1_ARB GL_TEXTURE2_ARB GL_TEXTURE3_ARB GL_TEXTURE4_ARB GL_TEXTURE5_ARB GL_TEXTURE6_ARB GL_TEXTURE7_ARB GL_TEXTURE8_ARB GL_TEXTURE9_ARB GL_TEXTURE10_ARB GL_TEXTURE11_ARB GL_TEXTURE12_ARB GL_TEXTURE13_ARB GL_TEXTURE14_ARB GL_TEXTURE15_ARB GL_TEXTURE16_ARB GL_TEXTURE17_ARB GL_TEXTURE18_ARB GL_TEXTURE19_ARB GL_TEXTURE20_ARB GL_TEXTURE21_ARB GL_TEXTURE22_ARB GL_TEXTURE23_ARB GL_TEXTURE24_ARB GL_TEXTURE25_ARB GL_TEXTURE26_ARB GL_TEXTURE27_ARB GL_TEXTURE28_ARB GL_TEXTURE29_ARB GL_TEXTURE30_ARB GL_TEXTURE31_ARB GL_MATRIX0_NV  GL_MATRIX1_NV  GL_MATRIX2_NV  GL_MATRIX3_NV  GL_MATRIX4_NV  GL_MATRIX5_NV  GL_MATRIX6_NV  GL_MATRIX7_NV
+param       transform   GLenum
+paramprop   transform   GL_IDENTITY_NV GL_INVERSE_NV GL_TRANSPOSE_NV GL_INVERSE_TRANSPOSE_NV
+category    GL_NV_vertex_program
+chromium    extpack
+
+name        VertexAttribPointerNV
+return      void
+param       index       GLuint
+param       size        GLint
+param       type        GLenum
+paramprop   type        GL_SHORT GL_FLOAT GL_DOUBLE GL_UNSIGNED_BYTE
+param       stride      GLsizei
+param       pointer     const GLvoid *
+category    GL_NV_vertex_program
+props       setclient
+chromium    extpack
+
+name        VertexAttrib1dNV
+return      void
+param       index   GLuint
+param       x   GLdouble
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib1dARB
+
+name        VertexAttrib1dvNV
+return      void
+param       index   GLuint
+param       v   const GLdouble *
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib1dvARB
+
+name        VertexAttrib1fNV
+return      void
+param       index   GLuint
+param       x   GLfloat
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib1fARB
+
+name        VertexAttrib1fvNV
+return      void
+param       index   GLuint
+param       v   const GLfloat *
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib1fvARB
+
+name        VertexAttrib1sNV
+return      void
+param       index   GLuint
+param       x   GLshort
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib1sARB
+
+name        VertexAttrib1svNV
+return      void
+param       index   GLuint
+param       v   const GLshort *
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib1svARB
+
+name        VertexAttrib2dNV
+return      void
+param       index   GLuint
+param       x   GLdouble
+param       y   GLdouble
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib2dARB
+
+name        VertexAttrib2dvNV
+return      void
+param       index   GLuint
+param       v   const GLdouble *
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib2dvARB
+
+name        VertexAttrib2fNV
+return      void
+param       index   GLuint
+param       x   GLfloat
+param       y   GLfloat
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib2fARB
+
+name        VertexAttrib2fvNV
+return      void
+param       index   GLuint
+param       v   const GLfloat *
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib2fvARB
+
+name        VertexAttrib2sNV
+return      void
+param       index   GLuint
+param       x   GLshort
+param       y   GLshort
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib2sARB
+
+name        VertexAttrib2svNV
+return      void
+param       index   GLuint
+param       v   const GLshort *
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib2svARB
+
+name        VertexAttrib3dNV
+return      void
+param       index   GLuint
+param       x   GLdouble
+param       y   GLdouble
+param       z   GLdouble
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib3dARB
+
+name        VertexAttrib3dvNV
+return      void
+param       index   GLuint
+param       v   const GLdouble *
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib3dvARB
+
+name        VertexAttrib3fNV
+return      void
+param       index   GLuint
+param       x   GLfloat
+param       y   GLfloat
+param       z   GLfloat
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib3fARB
+
+name        VertexAttrib3fvNV
+return      void
+param       index   GLuint
+param       v   const GLfloat *
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib3fvARB
+
+name        VertexAttrib3sNV
+return      void
+param       index   GLuint
+param       x   GLshort
+param       y   GLshort
+param       z   GLshort
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib3sARB
+
+name        VertexAttrib3svNV
+return      void
+param       index   GLuint
+param       v   const GLshort *
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib3svARB
+
+name        VertexAttrib4dNV
+return      void
+param       index   GLuint
+param       x   GLdouble
+param       y   GLdouble
+param       z   GLdouble
+param       w   GLdouble
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib4dARB
+
+name        VertexAttrib4dvNV
+return      void
+param       index   GLuint
+param       v   const GLdouble *
+vector      v   4
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib4dvARB
+
+name        VertexAttrib4fNV
+return      void
+param       index   GLuint
+param       x   GLfloat
+param       y   GLfloat
+param       z   GLfloat
+param       w   GLfloat
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib4fARB
+
+name        VertexAttrib4fvNV
+return      void
+param       index   GLuint
+param       v   const GLfloat *
+vector      v   4
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib4fvARB
+
+name        VertexAttrib4sNV
+return      void
+param       index   GLuint
+param       x   GLshort
+param       y   GLshort
+param       z   GLshort
+param       w   GLshort
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib4sARB
+
+name        VertexAttrib4svNV
+return      void
+param       index   GLuint
+param       v   const GLshort *
+vector      v   4
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib4svARB
+
+name        VertexAttrib4ubNV
+return      void
+param       index   GLuint
+param       x   GLubyte
+param       y   GLubyte
+param       z   GLubyte
+param       w   GLubyte
+category    GL_NV_vertex_program
+props       pervertex
+alias       VertexAttrib4NubARB
+
+name        VertexAttrib4ubvNV
+return      void
+param       index   GLuint
+param       v   const GLubyte *
+vector      v   4
+category    GL_NV_vertex_program
+alias       VertexAttrib4NubvARB
+props       pervertex
+chromium    nopack
+
+name        VertexAttribs1dvNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLdouble *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs1fvNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLfloat *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs1svNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLshort *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs2dvNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLdouble *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs2fvNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLfloat *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs2svNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLshort *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs3dvNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLdouble *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs3fvNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLfloat *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs3svNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLshort *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs4dvNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLdouble *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs4fvNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLfloat *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs4svNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLshort *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+name        VertexAttribs4ubvNV
+return      void
+param       index   GLuint
+param       n   GLsizei
+param       v   const GLubyte *
+category    GL_NV_vertex_program
+props       pervertex
+chromium    expandpack
+
+
+# GL_NV_fragment_program
+
+name        ProgramNamedParameter4fNV
+return      void
+param       id      GLuint
+param       len     GLsizei
+param       name        const GLubyte *
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+param       w       GLfloat
+category    GL_NV_fragment_program
+chromium    extpack
+
+name        ProgramNamedParameter4dNV
+return      void
+param       id      GLuint
+param       len     GLsizei
+param       name        const GLubyte *
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+param       w       GLdouble
+category    GL_NV_fragment_program
+chromium    extpack
+
+name        ProgramNamedParameter4fvNV
+return      void
+param       id      GLuint
+param       len     GLsizei
+param       name        const GLubyte *
+param       v       const GLfloat *
+category    GL_NV_fragment_program
+chromium    extpack
+
+name        ProgramNamedParameter4dvNV
+return      void
+param       id      GLuint
+param       len     GLsizei
+param       name        const GLubyte *
+param       v       const GLdouble *
+vector      v       4
+category    GL_NV_fragment_program
+chromium    extpack
+
+name        GetProgramNamedParameterfvNV
+return      void
+param       id      GLuint
+param       len     GLsizei
+param       name        const GLubyte *
+param       params      GLfloat *
+vector      params      4
+category    GL_NV_fragment_program
+props       get
+chromium    extpack
+
+name        GetProgramNamedParameterdvNV
+return      void
+param       id      GLuint
+param       len     GLsizei
+param       name        const GLubyte *
+param       params      GLdouble *
+vector      params      4
+category    GL_NV_fragment_program
+props       get
+chromium    extpack
+
+
+# GL_ARB_vertex_buffer_object
+
+name        BindBufferARB
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       buffer      GLuint
+category    GL_ARB_vertex_buffer_object
+props       nolist
+chromium    extpack
+
+name        BufferDataARB
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       size        GLsizeiptrARB
+param       data        const GLvoid *
+param       usage       GLenum
+paramprop   usage       GL_STREAM_DRAW_ARB GL_STREAM_READ_ARB GL_STREAM_COPY_ARB GL_STATIC_DRAW_ARB GL_STATIC_READ_ARB GL_STATIC_COPY_ARB GL_DYNAMIC_DRAW_ARB GL_DYNAMIC_READ_ARB GL_DYNAMIC_COPY_ARB
+category    GL_ARB_vertex_buffer_object
+props       nolist
+chromium    extpack
+
+name        BufferSubDataARB
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       offset      GLintptrARB
+param       size        GLsizeiptrARB
+param       data        const GLvoid *
+category    GL_ARB_vertex_buffer_object
+props       nolist
+chromium    extpack
+
+name        DeleteBuffersARB
+return      void
+param       n       GLsizei
+param       buffer      const GLuint *
+category    GL_ARB_vertex_buffer_object
+props       nolist
+chromium    extpack
+
+name        GenBuffersARB
+return      void
+param       n       GLsizei
+param       buffer      GLuint *
+category    GL_ARB_vertex_buffer_object
+props       get
+chromium    extpack serverdependent
+
+name        GetBufferParameterivARB
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       pname       GLenum
+paramprop   pname       GL_BUFFER_SIZE_ARB GL_BUFFER_USAGE_ARB GL_BUFFER_ACCESS_ARB GL_BUFFER_MAPPED_ARB
+param       params      GLint *
+category    GL_ARB_vertex_buffer_object
+props       get
+chromium    extpack
+
+name        GetBufferPointervARB
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       pname       GLenum
+paramprop   pname       GL_BUFFER_MAP_POINTER_ARB
+param       params      GLvoid **
+category    GL_ARB_vertex_buffer_object
+props       get useclient
+chromium    nopack
+
+name        GetBufferSubDataARB
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       offset      GLintptrARB
+param       size        GLsizeiptrARB
+param       data        void *
+category    GL_ARB_vertex_buffer_object
+props       get
+chromium    extpack
+
+name        IsBufferARB
+return      GLboolean
+param       buffer      GLuint
+paramaction buffer      initBuffer
+category    GL_ARB_vertex_buffer_object
+props       get
+chromium    extpack
+
+name        MapBufferARB
+return      void *
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       access      GLenum
+paramprop   access      GL_READ_ONLY_ARB GL_WRITE_ONLY_ARB GL_READ_WRITE_ARB
+category    GL_ARB_vertex_buffer_object
+props       nolist get
+chromium    nopack
+
+name        UnmapBufferARB
+return      GLboolean
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+category    GL_ARB_vertex_buffer_object
+props       nolist get
+chromium    nopack
+
+
+
+# GL_EXT_depth_bounds_test
+
+name        DepthBoundsEXT
+return      void
+param       zmin        GLclampd
+param       zmax        GLclampd
+category    GL_EXT_depth_bounds_test
+chromium    omit
+
+
+# GL_ARB_occlusion_query
+
+name        GenQueriesARB
+return      void
+param       n       GLsizei
+param       ids     GLuint *
+category    GL_ARB_occlusion_query
+props       get
+chromium    extpack serverdependent
+
+name        DeleteQueriesARB
+return      void
+param       n       GLsizei
+param       ids     const GLuint *
+category    GL_ARB_occlusion_query
+props       nolist
+chromium    extpack
+
+name        IsQueryARB
+return      GLboolean
+param       id      GLuint
+category    GL_ARB_occlusion_query
+props       get
+chromium    extpack
+
+name        BeginQueryARB
+return      void
+param       target      GLenum
+paramprop   target      GL_SAMPLES_PASSED_ARB
+param       id      GLuint
+category    GL_ARB_occlusion_query
+chromium    extpack
+
+name        EndQueryARB
+return      void
+param       target      GLenum
+paramprop   target      GL_SAMPLES_PASSED_ARB
+category    GL_ARB_occlusion_query
+chromium    extpack
+
+name        GetQueryivARB
+return      void
+param       target      GLenum
+paramprop   target      GL_SAMPLES_PASSED_ARB
+param       pname       GLenum
+paramprop   pname       GL_QUERY_COUNTER_BITS_ARB GL_CURRENT_QUERY_ARB
+param       params      GLint *
+category    GL_ARB_occlusion_query
+props       get
+chromium    extpack serverdpendent
+
+name        GetQueryObjectivARB
+return      void
+param       id      GLuint
+param       pname       GLenum
+paramprop   pname       GL_QUERY_RESULT_ARB GL_QUERY_RESULT_AVAILABLE_ARB
+param       params      GLint *
+category    GL_ARB_occlusion_query
+props       get
+chromium    extpack serverdependent
+
+name        GetQueryObjectuivARB
+return      void
+param       id      GLuint
+param       pname       GLenum
+paramprop   pname       GL_QUERY_RESULT_ARB GL_QUERY_RESULT_AVAILABLE_ARB
+param       params      GLuint *
+category    GL_ARB_occlusion_query
+props       get
+chromium    extpack serverdependent
+
+
+
+# Chromium
+
+name        CreateContext
+return      GLint
+param       dpyName     const char *
+param       visual      GLint
+param       shareCtx    GLint
+category    Chromium
+props       nolist get
+chromium    extpack
+
+name        DestroyContext
+return      void
+param       ctx     GLint
+category    Chromium
+props       nolist
+chromium    extpack
+
+name        MakeCurrent
+return      void
+param       window      GLint
+param       nativeWindow    GLint
+param       ctx     GLint
+category    Chromium
+props       nolist
+chromium    extpack
+
+name        WindowCreate
+return      GLint
+param       dpyName     const char *
+param       visBits     GLint
+category    Chromium
+props       nolist get
+chromium    extpack
+
+name        WindowDestroy
+return      void
+param       window      GLint
+category    Chromium
+props       nolist
+chromium    extpack
+
+name        WindowSize
+return      void
+param       window      GLint
+param       w       GLint
+param       h       GLint
+category    Chromium
+props       nolist
+chromium    extpack
+
+name        WindowPosition
+return      void
+param       window      GLint
+param       x       GLint
+param       y       GLint
+category    Chromium
+props       nolist
+chromium    extpack
+
+name        WindowVisibleRegion
+return      void
+param       window      GLint
+param       cRects      GLint
+param       pRects      const GLint *
+category    Chromium
+props       nolist
+chromium    extpack
+
+name        VBoxTexPresent
+return      void
+param       texture     GLuint
+param       cfg         GLuint
+param       xPos        GLint
+param       yPos        GLint
+param       cRects      GLint
+param       pRects      const GLint *
+category    Chromium
+props       nolist
+chromium    extpack
+chrelopcode 0
+
+# custom
+name        GetAttribsLocations
+return      void
+param       program     GLuint
+param       maxcbData   GLsizei
+param       cbData      GLsizei *
+param       pData       GLvoid *
+category    Chromium
+props       get
+chromium    extpack
+chrelopcode 1
+
+name        WindowShow
+return      void
+param       window      GLint
+param       flag        GLint
+category    Chromium
+props       nolist
+chromium    extpack
+
+name        SwapBuffers
+return      void
+param       window      GLint
+param       flags       GLint
+category    Chromium
+props       nolist
+chromium    extpack
+
+name        Writeback
+return      void
+param       writeback   GLint *
+category    Chromium
+props       nolist
+chromium    extpack
+
+name        BarrierCreateCR
+return      void
+param       name        GLuint
+param       count       GLuint
+category    GL_chromium
+props       nolist
+chromium    extpack
+
+name        BarrierDestroyCR
+return      void
+param       name        GLuint
+category    GL_chromium
+props       nolist
+chromium    extpack
+
+name        BarrierExecCR
+return      void
+param       name        GLuint
+category    GL_chromium
+props       nolist
+chromium    extpack
+
+name        SemaphoreCreateCR
+return      void
+param       name        GLuint
+param       count       GLuint
+category    GL_chromium
+props       nolist
+chromium    extpack
+
+name        SemaphoreDestroyCR
+return      void
+param       name        GLuint
+category    GL_chromium
+props       nolist
+chromium    extpack
+
+name        SemaphorePCR
+return      void
+param       name        GLuint
+category    GL_chromium
+props       nolist
+chromium    extpack
+
+name        SemaphoreVCR
+return      void
+param       name        GLuint
+category    GL_chromium
+props       nolist
+chromium    extpack
+
+name        BoundsInfoCR
+return      void
+param       bounds      const CRrecti *
+param       payload     const GLbyte *
+param       len     GLint
+param       num_opcodes GLint
+category    GL_chromium
+props       nolist
+chromium    pack
+
+name        ChromiumParameteriCR
+return      void
+param       target      GLenum
+paramprop   target      GL_CURSOR_POSITION_CR GL_DEFAULT_BBOX_CR GL_SCREEN_BBOX_CR GL_OBJECT_BBOX_CR GL_PRINT_STRING_CR GL_MURAL_SIZE_CR GL_NUM_SERVERS_CR GL_NUM_TILES_CR GL_TILE_BOUNDS_CR GL_VERTEX_COUNTS_CR GL_RESET_VERTEX_COUNTERS_CR GL_SET_MAX_VIEWPORT_CR GL_HEAD_SPU_NAME_CR GL_PERF_GET_FRAME_DATA_CR GL_PERF_GET_TIMER_DATA_CR GL_PERF_DUMP_COUNTERS_CR GL_PERF_SET_TOKEN_CR GL_PERF_SET_DUMP_ON_SWAP_CR GL_PERF_SET_DUMP_ON_FINISH_CR GL_PERF_SET_DUMP_ON_FLUSH_CR GL_PERF_START_TIMER_CR GL_PERF_STOP_TIMER_CR GL_WINDOW_SIZE_CR GL_TILE_INFO_CR GL_GATHER_DRAWPIXELS_CR GL_GATHER_PACK_CR GL_GATHER_CONNECT_CR GL_GATHER_POST_SWAPBUFFERS_CR GL_SAVEFRAME_ENABLED_CR GL_SAVEFRAME_FRAMENUM_CR GL_SAVEFRAME_STRIDE_CR GL_SAVEFRAME_SINGLE_CR GL_SAVEFRAME_FILESPEC_CR GL_READBACK_BARRIER_SIZE_CR
+param       value       GLint
+category    GL_chromium
+props       nolist
+chromium    extpack
+
+name        ChromiumParameterfCR
+return      void
+param       target      GLenum
+paramprop   target      GL_CURSOR_POSITION_CR GL_DEFAULT_BBOX_CR GL_SCREEN_BBOX_CR GL_OBJECT_BBOX_CR GL_PRINT_STRING_CR GL_MURAL_SIZE_CR GL_NUM_SERVERS_CR GL_NUM_TILES_CR GL_TILE_BOUNDS_CR GL_VERTEX_COUNTS_CR GL_RESET_VERTEX_COUNTERS_CR GL_SET_MAX_VIEWPORT_CR GL_HEAD_SPU_NAME_CR GL_PERF_GET_FRAME_DATA_CR GL_PERF_GET_TIMER_DATA_CR GL_PERF_DUMP_COUNTERS_CR GL_PERF_SET_TOKEN_CR GL_PERF_SET_DUMP_ON_SWAP_CR GL_PERF_SET_DUMP_ON_FINISH_CR GL_PERF_SET_DUMP_ON_FLUSH_CR GL_PERF_START_TIMER_CR GL_PERF_STOP_TIMER_CR GL_WINDOW_SIZE_CR GL_TILE_INFO_CR GL_GATHER_DRAWPIXELS_CR GL_GATHER_PACK_CR GL_GATHER_CONNECT_CR GL_GATHER_POST_SWAPBUFFERS_CR GL_SAVEFRAME_ENABLED_CR GL_SAVEFRAME_FRAMENUM_CR GL_SAVEFRAME_STRIDE_CR GL_SAVEFRAME_SINGLE_CR GL_SAVEFRAME_FILESPEC_CR GL_READBACK_BARRIER_SIZE_CR
+param       value       GLfloat
+category    GL_chromium
+props       nolist
+chromium    extpack
+
+name        ChromiumParametervCR
+return      void
+param       target      GLenum
+paramprop   target      GL_CURSOR_POSITION_CR GL_DEFAULT_BBOX_CR GL_SCREEN_BBOX_CR GL_OBJECT_BBOX_CR GL_PRINT_STRING_CR GL_MURAL_SIZE_CR GL_NUM_SERVERS_CR GL_NUM_TILES_CR GL_TILE_BOUNDS_CR GL_VERTEX_COUNTS_CR GL_RESET_VERTEX_COUNTERS_CR GL_SET_MAX_VIEWPORT_CR GL_HEAD_SPU_NAME_CR GL_PERF_GET_FRAME_DATA_CR GL_PERF_GET_TIMER_DATA_CR GL_PERF_DUMP_COUNTERS_CR GL_PERF_SET_TOKEN_CR GL_PERF_SET_DUMP_ON_SWAP_CR GL_PERF_SET_DUMP_ON_FINISH_CR GL_PERF_SET_DUMP_ON_FLUSH_CR GL_PERF_START_TIMER_CR GL_PERF_STOP_TIMER_CR GL_WINDOW_SIZE_CR GL_TILE_INFO_CR GL_GATHER_DRAWPIXELS_CR GL_GATHER_PACK_CR GL_GATHER_CONNECT_CR GL_GATHER_POST_SWAPBUFFERS_CR GL_SAVEFRAME_ENABLED_CR GL_SAVEFRAME_FRAMENUM_CR GL_SAVEFRAME_STRIDE_CR GL_SAVEFRAME_SINGLE_CR GL_SAVEFRAME_FILESPEC_CR GL_READBACK_BARRIER_SIZE_CR
+param       type        GLenum
+paramprop   type        GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_DOUBLE
+param       count       GLsizei
+param       values      const GLvoid *
+category    GL_chromium
+props       nolist
+chromium    extpack serverdependent
+
+name        GetChromiumParametervCR
+return      void
+param       target      GLenum
+paramprop   target      GL_CURSOR_POSITION_CR GL_DEFAULT_BBOX_CR GL_SCREEN_BBOX_CR GL_OBJECT_BBOX_CR GL_PRINT_STRING_CR GL_MURAL_SIZE_CR GL_NUM_SERVERS_CR GL_NUM_TILES_CR GL_TILE_BOUNDS_CR GL_VERTEX_COUNTS_CR GL_RESET_VERTEX_COUNTERS_CR GL_SET_MAX_VIEWPORT_CR GL_HEAD_SPU_NAME_CR GL_PERF_GET_FRAME_DATA_CR GL_PERF_GET_TIMER_DATA_CR GL_PERF_DUMP_COUNTERS_CR GL_PERF_SET_TOKEN_CR GL_PERF_SET_DUMP_ON_SWAP_CR GL_PERF_SET_DUMP_ON_FINISH_CR GL_PERF_SET_DUMP_ON_FLUSH_CR GL_PERF_START_TIMER_CR GL_PERF_STOP_TIMER_CR GL_WINDOW_SIZE_CR GL_TILE_INFO_CR GL_GATHER_DRAWPIXELS_CR GL_GATHER_PACK_CR GL_GATHER_CONNECT_CR GL_GATHER_POST_SWAPBUFFERS_CR GL_SAVEFRAME_ENABLED_CR GL_SAVEFRAME_FRAMENUM_CR GL_SAVEFRAME_STRIDE_CR GL_SAVEFRAME_SINGLE_CR GL_SAVEFRAME_FILESPEC_CR GL_READBACK_BARRIER_SIZE_CR
+param       index       GLuint
+paramlist   index       0 1 2
+param       type        GLenum
+paramprop   type        GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_DOUBLE
+param       count       GLsizei
+param       values      GLvoid *
+category    GL_chromium
+props       get
+chromium    extpack
+
+name        VBoxPackSetInjectThread
+return      GLint
+param       pHgsmi      struct VBOXUHGSMI *
+category    VBox
+chromium    nopack
+
+name        VBoxPackGetInjectID
+return      GLuint
+param       con         GLint
+category    VBox
+chromium    nopack
+
+name        VBoxPackSetInjectID
+return      void
+param       id          GLuint
+category    VBox
+chromium    nopack
+
+name        VBoxAttachThread
+return      void
+category    VBox
+chromium    nopack
+
+name        VBoxDetachThread
+return      void
+category    VBox
+chromium    nopack
+
+name        VBoxCreateContext
+return      GLint
+param       con         GLint
+param       dpyName     const char *
+param       visual      GLint
+param       shareCtx    GLint
+category    VBox
+chromium    nopack
+
+name        VBoxConChromiumParameteriCR
+return      void
+param       con         GLint
+param       target      GLenum
+paramprop   target      GL_CURSOR_POSITION_CR GL_DEFAULT_BBOX_CR GL_SCREEN_BBOX_CR GL_OBJECT_BBOX_CR GL_PRINT_STRING_CR GL_MURAL_SIZE_CR GL_NUM_SERVERS_CR GL_NUM_TILES_CR GL_TILE_BOUNDS_CR GL_VERTEX_COUNTS_CR GL_RESET_VERTEX_COUNTERS_CR GL_SET_MAX_VIEWPORT_CR GL_HEAD_SPU_NAME_CR GL_PERF_GET_FRAME_DATA_CR GL_PERF_GET_TIMER_DATA_CR GL_PERF_DUMP_COUNTERS_CR GL_PERF_SET_TOKEN_CR GL_PERF_SET_DUMP_ON_SWAP_CR GL_PERF_SET_DUMP_ON_FINISH_CR GL_PERF_SET_DUMP_ON_FLUSH_CR GL_PERF_START_TIMER_CR GL_PERF_STOP_TIMER_CR GL_WINDOW_SIZE_CR GL_TILE_INFO_CR GL_GATHER_DRAWPIXELS_CR GL_GATHER_PACK_CR GL_GATHER_CONNECT_CR GL_GATHER_POST_SWAPBUFFERS_CR GL_SAVEFRAME_ENABLED_CR GL_SAVEFRAME_FRAMENUM_CR GL_SAVEFRAME_STRIDE_CR GL_SAVEFRAME_SINGLE_CR GL_SAVEFRAME_FILESPEC_CR GL_READBACK_BARRIER_SIZE_CR
+param       value       GLint
+category    VBox
+chromium    nopack
+
+name        VBoxConChromiumParametervCR
+return      void
+param       con         GLint
+param       target      GLenum
+paramprop   target      GL_CURSOR_POSITION_CR GL_DEFAULT_BBOX_CR GL_SCREEN_BBOX_CR GL_OBJECT_BBOX_CR GL_PRINT_STRING_CR GL_MURAL_SIZE_CR GL_NUM_SERVERS_CR GL_NUM_TILES_CR GL_TILE_BOUNDS_CR GL_VERTEX_COUNTS_CR GL_RESET_VERTEX_COUNTERS_CR GL_SET_MAX_VIEWPORT_CR GL_HEAD_SPU_NAME_CR GL_PERF_GET_FRAME_DATA_CR GL_PERF_GET_TIMER_DATA_CR GL_PERF_DUMP_COUNTERS_CR GL_PERF_SET_TOKEN_CR GL_PERF_SET_DUMP_ON_SWAP_CR GL_PERF_SET_DUMP_ON_FINISH_CR GL_PERF_SET_DUMP_ON_FLUSH_CR GL_PERF_START_TIMER_CR GL_PERF_STOP_TIMER_CR GL_WINDOW_SIZE_CR GL_TILE_INFO_CR GL_GATHER_DRAWPIXELS_CR GL_GATHER_PACK_CR GL_GATHER_CONNECT_CR GL_GATHER_POST_SWAPBUFFERS_CR GL_SAVEFRAME_ENABLED_CR GL_SAVEFRAME_FRAMENUM_CR GL_SAVEFRAME_STRIDE_CR GL_SAVEFRAME_SINGLE_CR GL_SAVEFRAME_FILESPEC_CR GL_READBACK_BARRIER_SIZE_CR
+param       type        GLenum
+paramprop   type        GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_DOUBLE
+param       count       GLsizei
+param       values      const GLvoid *
+category    VBox
+props       nolist
+chromium    nopack
+
+
+name        VBoxWindowCreate
+return      GLint
+param       con         GLint
+param       dpyName     const char *
+param       visBits     GLint
+category    VBox
+chromium    nopack
+
+name        VBoxWindowDestroy
+return      void
+param       con         GLint
+param       window      GLint
+category    VBox
+chromium    nopack
+
+name        VBoxConCreate
+return      GLint
+param       pHgsmi      struct VBOXUHGSMI *
+category    VBox
+chromium    nopack
+
+name        VBoxConDestroy
+return      void
+param       con         GLint
+category    VBox
+chromium    nopack
+
+name        VBoxConFlush
+return      void
+param       con         GLint
+category    VBox
+chromium    nopack
+
+name        VBoxPresentComposition
+return      void
+param       win              GLint
+param       pCompositor      const struct VBOXVR_SCR_COMPOSITOR *
+param       pChangedEntry    const struct VBOXVR_SCR_COMPOSITOR_ENTRY *
+category    VBox
+chromium    nopack
+
+
+# OpenGL 1.5
+
+name        BindBuffer
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       buffer      GLuint
+category    1.5
+alias       BindBufferARB
+props       nolist
+chromium    extpack
+
+name        BufferData
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       size        GLsizeiptrARB
+param       data        const GLvoid *
+param       usage       GLenum
+paramprop   usage       GL_STREAM_DRAW_ARB GL_STREAM_READ_ARB GL_STREAM_COPY_ARB GL_STATIC_DRAW_ARB GL_STATIC_READ_ARB GL_STATIC_COPY_ARB GL_DYNAMIC_DRAW_ARB GL_DYNAMIC_READ_ARB GL_DYNAMIC_COPY_ARB
+category    1.5
+alias       BufferDataARB
+props       nolist
+chromium    extpack
+
+name        BufferSubData
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       offset      GLintptrARB
+param       size        GLsizeiptrARB
+param       data        const GLvoid *
+category    1.5
+alias       BufferSubDataARB
+props       nolist
+chromium    extpack
+
+name        DeleteBuffers
+return      void
+param       n       GLsizei
+paramlist   n       0
+param       buffer      const GLuint *
+category    1.5
+alias       DeleteBuffersARB
+props       nolist
+chromium    extpack
+
+name        GenBuffers
+return      void
+param       n       GLsizei
+paramlist   n       2
+param       buffer      GLuint *
+category    1.5
+alias       GenBuffersARB
+props       get
+chromium    extpack serverdependent
+
+name        GetBufferParameteriv
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       pname       GLenum
+paramprop   pname       GL_BUFFER_SIZE_ARB GL_BUFFER_USAGE_ARB GL_BUFFER_ACCESS_ARB GL_BUFFER_MAPPED_ARB
+param       params      GLint *
+category    1.5
+alias       GetBufferParameterivARB
+props       get
+chromium    extpack
+
+name        GetBufferPointerv
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       pname       GLenum
+paramprop   pname       GL_BUFFER_MAP_POINTER_ARB
+param       params      GLvoid **
+category    1.5
+alias       GetBufferPointervARB
+props       get useclient
+chromium    nopack
+
+name        GetBufferSubData
+return      void
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       offset      GLintptrARB
+param       size        GLsizeiptrARB
+param       data        void *
+category    1.5
+alias       GetBufferSubDataARB
+props       get
+chromium    extpack
+
+name        IsBuffer
+return      GLboolean
+param       buffer      GLuint
+paramlist   buffer      0
+category    1.5
+alias       IsBufferARB
+props       get
+chromium    extpack
+
+name        MapBuffer
+return      void *
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+param       access      GLenum
+paramprop   access      GL_READ_ONLY_ARB GL_WRITE_ONLY_ARB GL_READ_WRITE_ARB
+category    1.5
+alias       MapBufferARB
+props       nolist
+chromium    nopack
+
+name        UnmapBuffer
+return      GLboolean
+param       target      GLenum
+paramprop   target      GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB
+category    1.5
+alias       UnmapBufferARB
+props       nolist
+chromium    nopack
+
+
+name        GenQueries
+return      void
+param       n       GLsizei
+paramlist   n       0
+param       ids     GLuint *
+category    1.5
+alias       GenQueriesARB
+props       get
+chromium    omit 
+
+name        DeleteQueries
+return      void
+param       n       GLsizei
+paramlist   n       0
+param       ids     const GLuint *
+category    1.5
+alias       DeleteQueriesARB
+props       nolist
+chromium    omit
+
+name        IsQuery
+return      GLboolean
+param       id      GLuint
+paramlist   id      0
+category    1.5
+alias       IsQueryARB
+props       get
+chromium    omit
+
+name        BeginQuery
+return      void
+param       target      GLenum
+paramprop   target      GL_SAMPLES_PASSED_ARB
+param       id      GLuint
+paramlist   id      0
+category    1.5
+alias       BeginQueryARB
+chromium    omit
+
+name        EndQuery
+return      void
+param       target      GLenum
+paramprop   target      GL_SAMPLES_PASSED_ARB
+category    1.5
+alias       EndQueryARB
+chromium    omit
+
+name        GetQueryiv
+return      void
+param       target      GLenum
+paramprop   target      GL_SAMPLES_PASSED_ARB
+param       pname       GLenum
+paramprop   pname       GL_QUERY_COUNTER_BITS_ARB GL_CURRENT_QUERY_ARB
+param       params      GLint *
+category    1.5
+alias       GetQueryivARB
+props       get
+chromium    omit
+
+name        GetQueryObjectiv
+return      void
+param       id      GLuint
+paramlist   id      0
+param       pname       GLenum
+paramprop   pname       GL_QUERY_RESULT_ARB GL_QUERY_RESULT_AVAILABLE_ARB
+param       params      GLint *
+category    1.5
+alias       GetQueryObjectivARB
+props       get
+chromium    omit
+
+name        GetQueryObjectuiv
+return      void
+param       id      GLuint
+paramlist   id      0
+param       pname       GLenum
+paramprop   pname       GL_QUERY_RESULT_ARB GL_QUERY_RESULT_AVAILABLE_ARB
+param       params      GLuint *
+category    1.5
+alias       GetQueryObjectuivARB
+props       get
+chromium    omit
+
+#
+#  Simple-minded pixel compression for Mike Houston
+#
+name        ZPixCR
+return      void
+param       width       GLsizei
+param       height      GLsizei
+param       format      GLenum
+param       type        GLenum
+param       ztype       GLenum
+param       zparm       GLint
+param       length      GLint
+param       pixels      const GLvoid *
+category    GL_chromium
+props       render pixelstore
+chromium    extpack
+
+# GL_ARB_draw_buffers
+
+name        DrawBuffersARB
+alias       DrawBuffers
+return      void
+param       n           GLsizei
+param       bufs        const GLenum*
+category    GL_ARB_draw_buffers
+chromium    omit
+
+# OpenGL 2.0
+
+name        CreateShader
+return      GLuint
+param       type        GLenum
+paramprop   type        GL_VERTEX_SHADER GL_FRAGMENT_SHADER
+category    2.0
+props       get
+chromium    extpack serverdependent
+
+name        ShaderSource
+return      void
+param       shader      GLuint
+param       count       GLsizei
+param       string      const char **
+param       length      const GLint *
+category    2.0
+chromium    extpack
+
+name        CompileShader
+return      void
+param       shader      GLuint
+category    2.0
+chromium    extpack
+
+name        DeleteShader
+return      void
+param       shader      GLuint
+category    2.0
+props       nolist
+chromium    extpack
+
+name        IsShader
+return      GLboolean
+param       shader      GLuint
+category    2.0
+props       get
+chromium    extpack
+
+name        CreateProgram
+return      GLuint
+category    2.0
+props       get
+chromium    extpack serverdependent
+
+name        AttachShader
+return      void
+param       program     GLuint
+param       shader      GLuint
+category    2.0
+chromium    extpack
+
+name        DetachShader
+return      void
+param       program     GLuint
+param       shader      GLuint
+category    2.0
+chromium    extpack
+
+name        LinkProgram
+return      void
+param       program     GLuint
+category    2.0
+chromium    extpack
+
+name        UseProgram
+return      void
+param       program     GLuint
+category    2.0
+chromium    extpack
+
+name        DeleteProgram
+return      void
+param       program     GLuint
+category    2.0
+props       nolist
+chromium    extpack
+
+name        ValidateProgram
+return      void
+param       program     GLuint
+category    2.0
+chromium    extpack
+
+name        IsProgram
+return      GLboolean
+param       program     GLuint
+category    2.0
+props       get
+chromium    extpack
+
+name        GetActiveAttrib
+return      void
+param       program     GLuint
+param       index       GLuint
+param       bufSize     GLsizei
+param       length      GLsizei *
+param       size        GLint *
+param       type        GLenum *
+param       name        char *
+category    2.0
+props       get
+chromium    extpack
+
+name        GetAttribLocation
+return      GLint
+param       program     GLuint
+param       name        const char *
+category    2.0
+props       get
+chromium    extpack
+
+name        BindAttribLocation
+return      void
+param       program     GLuint
+param       index       GLuint
+param       name        const char *
+category    2.0
+chromium    extpack
+
+name        GetUniformLocation
+return      GLint
+param       program     GLuint
+param       name        const char *
+category    2.0
+props       get
+chromium    extpack
+
+name        GetActiveUniform
+return      void
+param       program     GLuint
+param       index       GLuint
+param       bufSize     GLsizei
+param       length      GLsizei *
+param       size        GLint *
+param       type        GLenum *
+param       name        char *
+category    2.0
+props       get
+chromium    extpack
+
+name        Uniform1f
+return      void
+param       location    GLint
+param       v0          GLfloat
+category    2.0
+chromium    extpack
+
+name        Uniform2f
+return      void
+param       location    GLint
+param       v0          GLfloat
+param       v1          GLfloat
+category    2.0
+chromium    extpack
+
+name        Uniform3f
+return      void
+param       location    GLint
+param       v0          GLfloat
+param       v1          GLfloat
+param       v2          GLfloat
+category    2.0
+chromium    extpack
+
+name        Uniform4f
+return      void
+param       location    GLint
+param       v0          GLfloat
+param       v1          GLfloat
+param       v2          GLfloat
+param       v3          GLfloat
+category    2.0
+chromium    extpack
+
+name        Uniform1i
+return      void
+param       location    GLint
+param       v0          GLint
+category    2.0
+chromium    extpack
+
+name        Uniform2i
+return      void
+param       location    GLint
+param       v0          GLint
+param       v1          GLint
+category    2.0
+chromium    extpack
+
+name        Uniform3i
+return      void
+param       location    GLint
+param       v0          GLint
+param       v1          GLint
+param       v2          GLint
+category    2.0
+chromium    extpack
+
+name        Uniform4i
+return      void
+param       location    GLint
+param       v0          GLint
+param       v1          GLint
+param       v2          GLint
+param       v3          GLint
+category    2.0
+chromium    extpack
+
+name        Uniform1fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLfloat *
+category    2.0
+chromium    extpack
+
+name        Uniform2fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLfloat *
+category    2.0
+chromium    extpack
+
+name        Uniform3fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLfloat *
+category    2.0
+chromium    extpack
+
+name        Uniform4fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLfloat *
+category    2.0
+chromium    extpack
+
+name        Uniform1iv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLint *
+category    2.0
+chromium    extpack
+
+name        Uniform2iv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLint *
+category    2.0
+chromium    extpack
+
+name        Uniform3iv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLint *
+category    2.0
+chromium    extpack
+
+name        Uniform4iv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLint *
+category    2.0
+chromium    extpack
+
+name        UniformMatrix2fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.0
+chromium    extpack
+
+name        UniformMatrix3fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.0
+chromium    extpack
+
+name        UniformMatrix4fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.0
+chromium    extpack
+
+name        GetShaderiv
+return      void
+param       shader      GLuint
+param       pname       GLenum
+paramprop   pname       GL_SHADER_TYPE GL_DELETE_STATUS GL_COMPILE_STATUS GL_INFO_LOG_LENGTH GL_SHADER_SOURCE_LENGTH
+param       params      GLint *
+category    2.0
+props       get serverdependent
+chromium    extpack
+
+name        GetProgramiv
+return      void
+param       program     GLuint
+param       pname       GLenum
+paramprop   pname       GL_DELETE_STATUS GL_LINK_STATUS GL_VALIDATE_STATUS GL_INFO_LOG_LENGTH GL_ATTACHED_SHADERS GL_ACTIVE_ATTRIBUTES GL_ACTIVE_ATTRIBUTE_MAX_LENGTH GL_ACTIVE_UNIFORMS GL_ACTIVE_UNIFORM_MAX_LENGTH
+param       params      GLint *
+category    2.0
+props       get serverdependent
+chromium    extpack
+
+name        GetAttachedShaders
+return      void
+param       program     GLuint
+param       maxCount    GLsizei
+param       count       GLsizei *
+param       shaders     GLuint *
+category    2.0
+props       get
+chromium    extpack
+
+name        GetShaderInfoLog
+return      void
+param       shader      GLuint
+param       bufSize     GLsizei
+param       length      GLsizei *
+param       infoLog     char *
+category    2.0
+props       get serverdependent
+chromium    extpack
+
+name        GetProgramInfoLog
+return      void
+param       program     GLuint
+param       bufSize     GLsizei
+param       length      GLsizei *
+param       infoLog     char *
+category    2.0
+props       get serverdependent
+chromium    extpack
+
+name        GetShaderSource
+return      void
+param       shader      GLuint
+param       bufSize     GLsizei
+param       length      GLsizei *
+param       source      char *
+category    2.0
+props       get
+chromium    extpack
+
+name        GetVertexAttribdv
+alias       GetVertexAttribdvARB
+return      void
+param       index       GLuint
+paramlist   index       1 2 3 4 5 6 7
+param       pname       GLenum
+paramprop   pname       GL_VERTEX_ATTRIB_ARRAY_ENABLED GL_VERTEX_ATTRIB_ARRAY_SIZE GL_VERTEX_ATTRIB_ARRAY_STRIDE GL_VERTEX_ATTRIB_ARRAY_TYPE GL_VERTEX_ATTRIB_ARRAY_NORMALIZED GL_CURRENT_VERTEX_ATTRIB
+param       params      GLdouble *
+paramvec    params      0.0 0.0 0.0 0.0
+vector      params      4
+category    2.0
+props       get
+chromium    nopack
+
+name        GetVertexAttribfv
+alias       GetVertexAttribfvARB
+return      void
+param       index       GLuint
+paramlist   index       1 2 3 4 5 6 7
+param       pname       GLenum
+paramprop   pname       GL_VERTEX_ATTRIB_ARRAY_ENABLED GL_VERTEX_ATTRIB_ARRAY_SIZE GL_VERTEX_ATTRIB_ARRAY_STRIDE GL_VERTEX_ATTRIB_ARRAY_TYPE GL_VERTEX_ATTRIB_ARRAY_NORMALIZED GL_CURRENT_VERTEX_ATTRIB
+param       params      GLfloat *
+paramvec    params      0.0 0.0 0.0 0.0
+vector      params      4
+category    2.0
+props       get
+chromium    nopack
+
+name        GetVertexAttribiv
+alias       GetVertexAttribivARB
+return      void
+param       index       GLuint
+paramlist   index       1 2 3 4 5 6 7
+param       pname       GLenum
+paramprop   pname       GL_VERTEX_ATTRIB_ARRAY_ENABLED GL_VERTEX_ATTRIB_ARRAY_SIZE GL_VERTEX_ATTRIB_ARRAY_STRIDE GL_VERTEX_ATTRIB_ARRAY_TYPE GL_VERTEX_ATTRIB_ARRAY_NORMALIZED GL_CURRENT_VERTEX_ATTRIB GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+param       params      GLint *
+paramvec    params      0 0 0 0
+vector      params      4
+category    2.0
+props       get
+chromium    nopack
+
+name        GetVertexAttribPointerv
+alias       GetVertexAttribPointervARB
+return      void
+param       index       GLuint
+paramlist   index       1 2 3 4 5 6 7
+param       pname       GLenum
+paramprop   pname       GL_VERTEX_ATTRIB_ARRAY_ENABLED GL_VERTEX_ATTRIB_ARRAY_SIZE GL_VERTEX_ATTRIB_ARRAY_STRIDE GL_VERTEX_ATTRIB_ARRAY_TYPE GL_VERTEX_ATTRIB_ARRAY_NORMALIZED GL_CURRENT_VERTEX_ATTRIB GL_VERTEX_ATTRIB_ARRAY_POINTER
+param       pointer     GLvoid **
+category    2.0
+props       useclient get
+chromium    nopack
+
+name        GetUniformfv
+return      void
+param       program     GLuint
+param       location    GLint
+param       params      GLfloat *
+category    2.0
+props       get
+chromium    extpack
+
+name        GetUniformiv
+return      void
+param       program     GLuint
+param       location    GLint
+param       params      GLint *
+category    2.0
+props       get
+chromium    extpack
+
+name        DrawBuffers
+return      void
+param       n           GLsizei
+param       bufs        const GLenum*
+category    2.0
+chromium    extpack
+
+name        StencilFuncSeparate
+return      void
+param       frontfunc   GLenum
+paramprop   func        GL_NEVER GL_LESS GL_LEQUAL GL_GREATER GL_GEQUAL GL_EQUAL GL_NOTEQUAL GL_ALWAYS
+param       backfunc    GLenum
+paramprop   func        GL_NEVER GL_LESS GL_LEQUAL GL_GREATER GL_GEQUAL GL_EQUAL GL_NOTEQUAL GL_ALWAYS
+param       ref         GLint
+param       mask        GLuint
+category    2.0
+chromium    extpack
+
+name        StencilOpSeparate
+return      void
+param       face        GLenum
+paramprop   face        GL_FRONT GL_BACK GL_FRONT_AND_BACK
+param       fail        GLenum
+paramprop   fail        GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GL_INCR_WRAP_EXT GL_DECR_WRAP_EXT
+param       zfail       GLenum
+paramprop   zfail       GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GL_INCR_WRAP_EXT GL_DECR_WRAP_EXT
+param       zpass       GLenum
+paramprop   zpass       GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GL_INCR_WRAP_EXT GL_DECR_WRAP_EXT
+category    2.0
+chromium    extpack
+
+name        StencilMaskSeparate
+return      void
+param       face        GLenum
+paramprop   face        GL_FRONT GL_BACK GL_FRONT_AND_BACK
+param       mask        GLuint
+category    2.0
+chromium    extpack
+
+name        BlendEquationSeparate
+return      void
+param       modeRGB        GLenum
+paramprop   modeRGB        GL_FUNC_ADD GL_FUNC_SUBTRACT GL_FUNC_REVERSE_SUBTRACT GL_MIN GL_MAX GL_LOGIC_OP
+param       modeAlpha      GLenum
+paramprop   modeAlpha      GL_FUNC_ADD GL_FUNC_SUBTRACT GL_FUNC_REVERSE_SUBTRACT GL_MIN GL_MAX GL_LOGIC_OP
+category    2.0
+chromium    extpack
+
+name        VertexAttrib1s
+alias       VertexAttrib1sARB
+return      void
+param       index       GLuint
+param       x       GLshort
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib1f
+alias       VertexAttrib1fARB
+return      void
+param       index       GLuint
+param       x       GLfloat
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib1d
+alias       VertexAttrib1dARB
+return      void
+param       index       GLuint
+param       x       GLdouble
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib2s
+alias       VertexAttrib2sARB
+return      void
+param       index       GLuint
+param       x       GLshort
+param       y       GLshort
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib2f
+alias       VertexAttrib2fARB
+return      void
+param       index       GLuint
+param       x       GLfloat
+param       y       GLfloat
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib2d
+alias       VertexAttrib2dARB
+return      void
+param       index       GLuint
+param       x       GLdouble
+param       y       GLdouble
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib3s
+alias       VertexAttrib3sARB
+return      void
+param       index       GLuint
+param       x       GLshort
+param       y       GLshort
+param       z       GLshort
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib3f
+alias       VertexAttrib3fARB
+return      void
+param       index       GLuint
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib3d
+alias       VertexAttrib3dARB
+return      void
+param       index       GLuint
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4s
+alias       VertexAttrib4sARB
+return      void
+param       index       GLuint
+param       x       GLshort
+param       y       GLshort
+param       z       GLshort
+param       w       GLshort
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4f
+alias       VertexAttrib4fARB
+return      void
+param       index       GLuint
+param       x       GLfloat
+param       y       GLfloat
+param       z       GLfloat
+param       w       GLfloat
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4d
+alias       VertexAttrib4dARB
+return      void
+param       index       GLuint
+param       x       GLdouble
+param       y       GLdouble
+param       z       GLdouble
+param       w       GLdouble
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4Nub
+alias       VertexAttrib4NubARB
+return      void
+param       index       GLuint
+param       x       GLubyte
+param       y       GLubyte
+param       z       GLubyte
+param       w       GLubyte
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib1sv
+alias       VertexAttrib1svARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLshort *
+paramvec    v       1
+vector      v       1
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib1fv
+alias       VertexAttrib1fvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLfloat *
+paramvec    v       1.0
+vector      v       1
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib1dv
+alias       VertexAttrib1dvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLdouble *
+paramvec    v       1.0
+vector      v       1
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib2sv
+alias       VertexAttrib2svARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLshort *
+paramvec    v       1 1
+vector      v       2
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib2fv
+alias       VertexAttrib2fvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLfloat *
+paramvec    v       1.0 1.0
+vector      v       2
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib2dv
+alias       VertexAttrib2dvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLdouble *
+paramvec    v       1.0 1.0
+vector      v       2
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib3sv
+alias       VertexAttrib3svARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLshort *
+paramvec    v       1 1
+vector      v       3
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib3fv
+alias       VertexAttrib3fvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLfloat *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib3dv
+alias       VertexAttrib3dvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0
+vector      v       3
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4bv
+alias       VertexAttrib4bvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLbyte *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4sv
+alias       VertexAttrib4svARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLshort *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4iv
+alias       VertexAttrib4ivARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLint *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4ubv
+alias       VertexAttrib4ubvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLubyte *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4usv
+alias       VertexAttrib4usvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLushort *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4uiv
+alias       VertexAttrib4uivARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLuint *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4fv
+alias       VertexAttrib4fvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLfloat *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4dv
+alias       VertexAttrib4dvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLdouble *
+paramvec    v       1.0 1.0 1.0 1.0
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4Nbv
+alias       VertexAttrib4NbvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLbyte *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4Nsv
+alias       VertexAttrib4NsvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLshort *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4Niv
+alias       VertexAttrib4NivARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLint *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4Nubv
+alias       VertexAttrib4NubvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLubyte *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4Nusv
+alias       VertexAttrib4NusvARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLushort *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttrib4Nuiv
+alias       VertexAttrib4NuivARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       v       const GLuint *
+paramvec    v       1 1 1 1
+vector      v       4
+category    2.0
+props       pervertex
+chromium    nopack
+
+name        VertexAttribPointer
+alias       VertexAttribPointerARB
+return      void
+param       index       GLuint
+paramlist   index       0 1 2 3 4 5 6 7
+param       size        GLint
+paramlist   size        1 2 3 4
+param       type        GLenum
+paramprop   type        GL_SHORT GL_FLOAT GL_DOUBLE
+param       normalized  GLboolean
+paramlist   normalized  GL_TRUE GL_FALSE
+param       stride      GLsizei
+paramlist   stride      0
+param       pointer     const GLvoid *
+category    2.0
+props       setclient
+chromium    nopack
+
+name        EnableVertexAttribArray
+alias       EnableVertexAttribArrayARB
+return      void
+param       index       GLuint
+category    2.0
+props       setclient
+chromium    nopack
+
+name        DisableVertexAttribArray
+alias       DisableVertexAttribArrayARB
+return      void
+param       index       GLuint
+category    2.0
+props       setclient
+chromium    nopack
+
+# GL_ARB_shader_objects
+
+name        GetHandleARB
+return      VBoxGLhandleARB
+param       pname           GLenum
+paramprop   pname           GL_PROGRAM_OBJECT_ARB
+category    GL_ARB_shader_objects
+props       get
+chromium    extpack serverdependent
+
+name        DeleteObjectARB
+return      void
+param       obj             VBoxGLhandleARB
+category    GL_ARB_shader_objects
+props       nolist
+chromium    extpack
+
+name        DetachObjectARB
+alias       DetachShader
+return      void
+param       containerObj    VBoxGLhandleARB
+param       attachedObj     VBoxGLhandleARB
+category    GL_ARB_shader_objects
+chromium    extpack
+
+name        CreateShaderObjectARB
+alias       CreateShader
+return      VBoxGLhandleARB
+param       shaderType      GLenum
+paramprop   shaderType      GL_FRAGMENT_SHADER_ARB GL_VERTEX_SHADER_ARB
+category    GL_ARB_shader_objects
+props       get
+chromium    nopack
+
+name        ShaderSourceARB
+alias       ShaderSource
+return      void
+param       shaderObj   VBoxGLhandleARB
+param       count       GLsizei
+param       string      const GLcharARB **
+param       length      const GLint *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        CompileShaderARB
+alias       CompileShader
+return      void
+param       shaderObj   VBoxGLhandleARB
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        CreateProgramObjectARB
+alias       CreateProgram
+return      VBoxGLhandleARB
+category    GL_ARB_shader_objects
+props       get
+chromium    nopack
+
+name        AttachObjectARB
+alias       AttachShader
+return      void
+param       containerObj    VBoxGLhandleARB
+param       obj             VBoxGLhandleARB
+category    GL_ARB_shader_objects
+chromium    extpack
+
+name        LinkProgramARB
+alias       LinkProgram
+return      void
+param       programObj      VBoxGLhandleARB
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        UseProgramObjectARB
+alias       UseProgram
+return      void
+param       programObj      VBoxGLhandleARB
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        ValidateProgramARB
+alias       ValidateProgram
+return      void
+param       programObj      VBoxGLhandleARB
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform1fARB
+alias       Uniform1f
+return      void
+param       location    GLint
+param       v0          GLfloat
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform2fARB
+alias       Uniform2f
+return      void
+param       location    GLint
+param       v0          GLfloat
+param       v1          GLfloat
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform3fARB
+alias       Uniform3f
+return      void
+param       location    GLint
+param       v0          GLfloat
+param       v1          GLfloat
+param       v2          GLfloat
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform4fARB
+alias       Uniform4f
+return      void
+param       location    GLint
+param       v0          GLfloat
+param       v1          GLfloat
+param       v2          GLfloat
+param       v3          GLfloat
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform1iARB
+alias       Uniform1i
+return      void
+param       location    GLint
+param       v0          GLint
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform2iARB
+alias       Uniform2i
+return      void
+param       location    GLint
+param       v0          GLint
+param       v1          GLint
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform3iARB
+alias       Uniform3i
+return      void
+param       location    GLint
+param       v0          GLint
+param       v1          GLint
+param       v2          GLint
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform4iARB
+alias       Uniform4i
+return      void
+param       location    GLint
+param       v0          GLint
+param       v1          GLint
+param       v2          GLint
+param       v3          GLint
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform1fvARB
+alias       Uniform1fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLfloat *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform2fvARB
+alias       Uniform2fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLfloat *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform3fvARB
+alias       Uniform3fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLfloat *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform4fvARB
+alias       Uniform4fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLfloat *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform1ivARB
+alias       Uniform1iv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLint *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform2ivARB
+alias       Uniform2iv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLint *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform3ivARB
+alias       Uniform3iv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLint *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        Uniform4ivARB
+alias       Uniform4iv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       value       const GLint *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        UniformMatrix2fvARB
+alias       UniformMatrix2fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        UniformMatrix3fvARB
+alias       UniformMatrix3fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        UniformMatrix4fvARB
+alias       UniformMatrix4fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    GL_ARB_shader_objects
+chromium    nopack
+
+name        GetObjectParameterfvARB
+return      void
+param       obj         VBoxGLhandleARB
+param       pname       GLenum
+paramprop   pname       GL_OBJECT_TYPE_ARB GL_OBJECT_SUBTYPE_ARB GL_OBJECT_DELETE_STATUS_ARB GL_OBJECT_COMPILE_STATUS_ARB GL_OBJECT_LINK_STATUS_ARB GL_OBJECT_VALIDATE_STATUS_ARB GL_OBJECT_INFO_LOG_LENGTH_ARB GL_OBJECT_ATTACHED_OBJECTS_ARB GL_OBJECT_ACTIVE_UNIFORMS_ARB GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB GL_OBJECT_SHADER_SOURCE_LENGTH_ARB
+param       params      GLfloat *
+category    GL_ARB_shader_objects
+props       get serverdependent
+chromium    extpack
+
+name        GetObjectParameterivARB
+return      void
+param       obj         VBoxGLhandleARB
+param       pname       GLenum
+paramprop   pname       GL_OBJECT_TYPE_ARB GL_OBJECT_SUBTYPE_ARB GL_OBJECT_DELETE_STATUS_ARB GL_OBJECT_COMPILE_STATUS_ARB GL_OBJECT_LINK_STATUS_ARB GL_OBJECT_VALIDATE_STATUS_ARB GL_OBJECT_INFO_LOG_LENGTH_ARB GL_OBJECT_ATTACHED_OBJECTS_ARB GL_OBJECT_ACTIVE_UNIFORMS_ARB GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB GL_OBJECT_SHADER_SOURCE_LENGTH_ARB
+param       params      GLint *
+category    GL_ARB_shader_objects
+props       get serverdependent
+chromium    extpack
+
+name        GetInfoLogARB
+return      void
+param       obj         VBoxGLhandleARB
+param       maxLength   GLsizei
+param       length      GLsizei *
+param       infoLog     GLcharARB *
+category    GL_ARB_shader_objects
+props       get serverdependent
+chromium    extpack
+
+name        GetAttachedObjectsARB
+return      void
+param       containerObj    VBoxGLhandleARB
+param       maxCount        GLsizei
+param       count           GLsizei *
+param       obj             VBoxGLhandleARB *
+category    GL_ARB_shader_objects
+props       get
+chromium    extpack
+
+name        GetUniformLocationARB
+alias       GetUniformLocation
+return      GLint
+param       programObj  VBoxGLhandleARB
+param       name        const GLcharARB *
+category    GL_ARB_shader_objects
+props       get
+chromium    nopack
+
+name        GetActiveUniformARB
+alias       GetActiveUniform
+return      void
+param       programObj  VBoxGLhandleARB
+param       index       GLuint
+param       maxLength   GLsizei
+param       length      GLsizei *
+param       size        GLint *
+param       type        GLenum *
+param       name        GLcharARB *
+category    GL_ARB_shader_objects
+props       get
+chromium    nopack
+
+name        GetShaderSourceARB
+alias       GetShaderSource
+return      void
+param       obj         VBoxGLhandleARB
+param       maxLength   GLsizei
+param       length      GLsizei *
+param       source      GLcharARB *
+category    GL_ARB_shader_objects
+props       get
+chromium    nopack
+
+name        GetUniformfvARB
+alias       GetUniformfv
+return      void
+param       programObj  VBoxGLhandleARB
+param       location    GLint
+param       params      GLfloat *
+category    GL_ARB_shader_objects
+props       get
+chromium    nopack
+
+name        GetUniformivARB
+alias       GetUniformiv
+return      void
+param       programObj  VBoxGLhandleARB
+param       location    GLint
+param       params      GLint *
+category    GL_ARB_shader_objects
+props       get
+chromium    nopack
+
+# GL_ARB_vertex_shader
+
+name        GetActiveAttribARB
+alias       GetActiveAttrib
+return      void
+param       programObj  VBoxGLhandleARB
+param       index       GLuint
+param       maxLength   GLsizei
+param       length      GLsizei *
+param       size        GLint *
+param       type        GLenum *
+param       name        GLcharARB *
+category    GL_ARB_vertex_shader
+props       get
+chromium    nopack
+
+name        GetAttribLocationARB
+alias       GetAttribLocation
+return      GLint
+param       programObj  VBoxGLhandleARB
+param       name        const GLcharARB *
+category    GL_ARB_vertex_shader
+props       get
+chromium    nopack
+
+name        BindAttribLocationARB
+alias       BindAttribLocation
+return      void
+param       programObj  VBoxGLhandleARB
+param       index       GLuint
+param       name        const GLcharARB *
+category    GL_ARB_vertex_shader
+chromium    nopack
+
+# GL_EXT_framebuffer_object
+
+name        IsRenderbufferEXT
+return      GLboolean
+param       renderbuffer    GLuint
+category    GL_EXT_framebuffer_object
+props       get
+chromium    extpack
+
+name        BindRenderbufferEXT
+return      void
+param       target          GLenum
+paramprop   target          GL_RENDERBUFFER_EXT
+param       renderbuffer    GLuint
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        DeleteRenderbuffersEXT
+return      void
+param       n               GLsizei
+param       renderbuffers   const GLuint *
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        GenRenderbuffersEXT
+return      void
+param       n               GLsizei
+param       renderbuffers   GLuint *
+category    GL_EXT_framebuffer_object
+props       get
+chromium    extpack
+
+name        RenderbufferStorageEXT
+return      void
+param       target          GLenum
+paramprop   target          GL_RENDERBUFFER_EXT
+param       internalformat  GLenum
+paramprop   internalformat  GL_STENCIL_INDEX1_EXT GL_STENCIL_INDEX4_EXT GL_STENCIL_INDEX8_EXT GL_STENCIL_INDEX16_EXT GL_ALPHA GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16 GL_COMPRESSED_ALPHA_ARB GL_COMPRESSED_LUMINANCE_ARB GL_COMPRESSED_LUMINANCE_ALPHA_ARB GL_COMPRESSED_INTENSITY_ARB GL_COMPRESSED_RGB_ARB GL_COMPRESSED_RGBA_ARB
+param       width           GLsizei
+param       height          GLsizei
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        GetRenderbufferParameterivEXT
+return      void
+param       target          GLenum
+paramprop   target          GL_RENDERBUFFER_EXT
+param       pname           GLenum
+paramprop   pname           GL_RENDERBUFFER_WIDTH_EXT GL_RENDERBUFFER_HEIGHT_EXT GL_RENDERBUFFER_INTERNAL_FORMAT_EXT GL_RENDERBUFFER_RED_SIZE_EXT GL_RENDERBUFFER_GREEN_SIZE_EXT GL_RENDERBUFFER_BLUE_SIZE_EXT GL_RENDERBUFFER_ALPHA_SIZE_EXT GL_RENDERBUFFER_DEPTH_SIZE_EXT GL_RENDERBUFFER_STENCIL_SIZE_EXT
+param       params          GLint *
+category    GL_EXT_framebuffer_object
+props       get
+chromium    extpack
+
+name        IsFramebufferEXT
+return      GLboolean
+param       framebuffer     GLuint
+category    GL_EXT_framebuffer_object
+props       get
+chromium    extpack
+
+name        BindFramebufferEXT
+return      void
+param       target          GLenum
+paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
+param       framebuffer     GLuint
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        BindFramebuffer
+alias       BindFramebufferEXT
+return      void
+param       target          GLenum
+paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
+param       framebuffer     GLuint
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        DeleteFramebuffersEXT
+return      void
+param       n               GLsizei
+param       framebuffers    const GLuint *
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        DeleteFramebuffers
+alias       DeleteFramebuffersEXT
+return      void
+param       n               GLsizei
+param       framebuffers    const GLuint *
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        GenFramebuffersEXT
+return      void
+param       n               GLsizei
+param       framebuffers    GLuint *
+category    GL_EXT_framebuffer_object
+props       get
+chromium    extpack
+
+name        GenFramebuffers
+alias       GenFramebuffersEXT
+return      void
+param       n               GLsizei
+param       framebuffers    GLuint *
+category    GL_EXT_framebuffer_object
+props       get
+chromium    extpack
+
+name        CheckFramebufferStatusEXT
+return      GLenum
+param       target          GLenum
+paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
+category    GL_EXT_framebuffer_object
+props       get
+chromium    extpack
+
+name        CheckFramebufferStatus
+alias       CheckFramebufferStatusEXT
+return      GLenum
+param       target          GLenum
+paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
+category    GL_EXT_framebuffer_object
+props       get
+chromium    extpack
+
+name        FramebufferTexture1DEXT
+return      void
+param       target          GLenum
+paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
+param       attachment      GLenum
+paramprop   attachment      GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT
+param       textarget       GLenum
+param       texture         GLuint
+param       level           GLint
+return      void
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        FramebufferTexture2DEXT
+return      void
+param       target          GLenum
+paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
+param       attachment      GLenum
+paramprop   attachment      GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT
+param       textarget       GLenum
+param       texture         GLuint
+param       level           GLint
+return      void
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        FramebufferTexture2D
+alias       FramebufferTexture2DEXT
+return      void
+param       target          GLenum
+paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
+param       attachment      GLenum
+paramprop   attachment      GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT
+param       textarget       GLenum
+param       texture         GLuint
+param       level           GLint
+return      void
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        FramebufferTexture3DEXT
+return      void
+param       target          GLenum
+paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
+param       attachment      GLenum
+paramprop   attachment      GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT
+param       textarget       GLenum
+param       texture         GLuint
+param       level           GLint
+param       zoffset         GLint
+return      void
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        FramebufferRenderbufferEXT
+return      void
+param       target          GLenum
+paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
+param       attachment      GLenum
+paramprop   attachment      GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT
+param       renderbuffertarget GLenum
+param       renderbuffer    GLuint
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+name        GetFramebufferAttachmentParameterivEXT
+return      void
+param       target          GLenum
+paramprop   target          GL_FRAMEBUFFER_EXT GL_READ_FRAMEBUFFER_EXT GL_DRAW_FRAMEBUFFER_EXT
+param       attachment      GLenum
+paramprop   attachment      GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT
+param       pname           GLenum
+paramprop   pname           GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT
+param       params          GLint *
+category    GL_EXT_framebuffer_object
+props       get
+chromium    extpack
+
+name        GenerateMipmapEXT
+return      void
+param       target          GLenum
+category    GL_EXT_framebuffer_object
+chromium    extpack
+
+# GL_EXT_compiled_vertex_array
+
+name        LockArraysEXT
+return      void
+param       first           GLint
+param       count           GLint
+category    GL_EXT_compiled_vertex_array
+chromium    extpack
+
+name        UnlockArraysEXT
+return      void
+category    GL_EXT_compiled_vertex_array
+chromium    extpack
+
+# custom
+name        GetUniformsLocations
+return      void
+param       program     GLuint
+param       maxcbData   GLsizei
+param       cbData      GLsizei *
+param       pData       GLvoid *
+category    Chromium
+props       get
+chromium    extpack
+
+# OpenGL 2.1
+name        UniformMatrix2x3fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
+name        UniformMatrix3x2fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
+name        UniformMatrix2x4fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
+name        UniformMatrix4x2fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
+name        UniformMatrix4x3fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
+name        UniformMatrix3x4fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
+# GL_EXT_framebuffer_blit
+name        BlitFramebufferEXT
+return      void
+param       srcX0       GLint
+param       srcY0       GLint
+param       srcX1       GLint
+param       srcY1       GLint
+param       dstX0       GLint
+param       dstY0       GLint
+param       dstX1       GLint
+param       dstY1       GLint
+param       mask        GLbitfield
+param       filter      GLenum
+paramprop   filter      GL_LINEAR GL_NEAREST
+category    GL_EXT_framebuffer_blit
+chromium    extpack
+
+# GL_EXT_framebuffer_blit
+name        BlitFramebuffer
+alias       BlitFramebufferEXT
+return      void
+param       srcX0       GLint
+param       srcY0       GLint
+param       srcX1       GLint
+param       srcY1       GLint
+param       dstX0       GLint
+param       dstY0       GLint
+param       dstX1       GLint
+param       dstY1       GLint
+param       mask        GLbitfield
+param       filter      GLenum
+paramprop   filter      GL_LINEAR GL_NEAREST
+category    GL_EXT_framebuffer_blit
+chromium    extpack
+
+# GL_EXT_blend_equation_separate
+name        BlendEquationSeparateEXT
+alias       BlendEquationSeparate
+return      void
+param       modeRGB        GLenum
+paramprop   modeRGB        GL_FUNC_ADD GL_FUNC_SUBTRACT GL_FUNC_REVERSE_SUBTRACT GL_MIN GL_MAX GL_LOGIC_OP
+param       modeAlpha      GLenum
+paramprop   modeAlpha      GL_FUNC_ADD GL_FUNC_SUBTRACT GL_FUNC_REVERSE_SUBTRACT GL_MIN GL_MAX GL_LOGIC_OP
+category    GL_EXT_blend_equation_separate
+chromium    nopack
+
+# GL_GREMEDY_string_marker
+name        StringMarkerGREMEDY
+return      void
+param       len        GLsizei
+param       string     const GLvoid*
+category    GL_GREMEDY_string_marker
+chromium    nopack
+
+# end of file sentinel
+
+name        dummy
+alias       dummyEXT
Index: /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.py	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.py	(revision 86648)
@@ -0,0 +1,817 @@
+#!/usr/common/bin/python
+
+# apiutil.py
+#
+# This file defines a bunch of utility functions for OpenGL API code
+# generation.
+
+from __future__ import print_function
+import sys, string, re
+
+
+#======================================================================
+
+def CopyrightC( ):
+	print("""/* Copyright (c) 2001, Stanford University
+	All rights reserved.
+
+	See the file LICENSE.txt for information on redistributing this software. */
+	""")
+
+def CopyrightDef( ):
+	print("""; Copyright (c) 2001, Stanford University
+	; All rights reserved.
+	;
+	; See the file LICENSE.txt for information on redistributing this software.
+	""")
+
+
+
+#======================================================================
+
+class APIFunction:
+	"""Class to represent a GL API function (name, return type,
+	parameters, etc)."""
+	def __init__(self):
+		self.name = ''
+		self.returnType = ''
+		self.category = ''
+		self.offset = -1
+		self.alias = ''
+		self.vectoralias = ''
+		self.params = []
+		self.paramlist = []
+		self.paramvec = []
+		self.paramaction = []
+		self.paramprop = []
+		self.paramset = []
+		self.props = []
+		self.chromium = []
+		self.chrelopcode = -1
+
+
+
+def ProcessSpecFile(filename, userFunc):
+	"""Open the named API spec file and call userFunc(record) for each record
+	processed."""
+	specFile = open(filename, "r")
+	if not specFile:
+		print("Error: couldn't open %s file!" % filename)
+		sys.exit()
+
+	record = APIFunction()
+
+	for line in specFile.readlines():
+
+		# split line into tokens
+		tokens = line.split()
+
+		if len(tokens) > 0 and line[0] != '#':
+
+			if tokens[0] == 'name':
+				if record.name != '':
+					# process the function now
+					userFunc(record)
+					# reset the record
+					record = APIFunction()
+
+				record.name = tokens[1]
+
+			elif tokens[0] == 'return':
+				record.returnType = ' '.join(tokens[1:])
+			
+			elif tokens[0] == 'param':
+				name = tokens[1]
+				type = ' '.join(tokens[2:])
+				vecSize = 0
+				record.params.append((name, type, vecSize))
+
+			elif tokens[0] == 'paramprop':
+				name = tokens[1]
+				str = tokens[2:]
+				enums = []
+				for i in range(len(str)):
+					enums.append(str[i]) 
+				record.paramprop.append((name, enums))
+
+			elif tokens[0] == 'paramlist':
+				name = tokens[1]
+				str = tokens[2:]
+				list = []
+				for i in range(len(str)):
+					list.append(str[i]) 
+				record.paramlist.append((name,list))
+
+			elif tokens[0] == 'paramvec':
+				name = tokens[1]
+				str = tokens[2:]
+				vec = []
+				for i in range(len(str)):
+					vec.append(str[i]) 
+				record.paramvec.append((name,vec))
+
+			elif tokens[0] == 'paramset':
+				line = tokens[1:]
+				result = []
+				for i in range(len(line)):
+					tset = line[i]
+					if tset == '[':
+						nlist = []
+					elif tset == ']':
+						result.append(nlist)
+						nlist = []
+					else:
+						nlist.append(tset)
+				if result != []:
+					record.paramset.append(result)
+
+			elif tokens[0] == 'paramaction':
+				name = tokens[1]
+				str = tokens[2:]
+				list = []
+				for i in range(len(str)):
+					list.append(str[i]) 
+				record.paramaction.append((name,list))
+
+			elif tokens[0] == 'category':
+				record.category = tokens[1]
+
+			elif tokens[0] == 'offset':
+				if tokens[1] == '?':
+					record.offset = -2
+				else:
+					record.offset = int(tokens[1])
+
+			elif tokens[0] == 'alias':
+				record.alias = tokens[1]
+
+			elif tokens[0] == 'vectoralias':
+				record.vectoralias = tokens[1]
+
+			elif tokens[0] == 'props':
+				record.props = tokens[1:]
+
+			elif tokens[0] == 'chromium':
+				record.chromium = tokens[1:]
+
+			elif tokens[0] == 'vector':
+				vecName = tokens[1]
+				vecSize = int(tokens[2])
+				for i in range(len(record.params)):
+					(name, type, oldSize) = record.params[i]
+					if name == vecName:
+						record.params[i] = (name, type, vecSize)
+						break
+
+			elif tokens[0] == 'chrelopcode':
+				record.chrelopcode = int(tokens[1])
+
+			else:
+				print('Invalid token %s after function %s' % (tokens[0], record.name))
+			#endif
+		#endif
+	#endfor
+	specFile.close()
+#enddef
+
+
+
+
+
+# Dictionary [name] of APIFunction:
+__FunctionDict = {}
+
+# Dictionary [name] of name
+__VectorVersion = {}
+
+# Reverse mapping of function name aliases
+__ReverseAliases = {}
+
+
+def AddFunction(record):
+	assert record.name not in __FunctionDict
+	#if not "omit" in record.chromium:
+	__FunctionDict[record.name] = record
+
+
+
+def GetFunctionDict(specFile = ""):
+	if not specFile:
+		specFile = sys.argv[1]+"/APIspec.txt"
+	if len(__FunctionDict) == 0:
+		ProcessSpecFile(specFile, AddFunction)
+		# Look for vector aliased functions
+		for func in __FunctionDict.keys():
+			va = __FunctionDict[func].vectoralias
+			if va != '':
+				__VectorVersion[va] = func
+			#endif
+
+			# and look for regular aliases (for glloader)
+			a = __FunctionDict[func].alias
+			if a:
+				if a in __ReverseAliases:
+					__ReverseAliases[a].append(func)
+				else:
+					__ReverseAliases[a] = [func]
+	#endif
+	return __FunctionDict
+
+
+def GetAllFunctions(specFile = ""):
+	"""Return sorted list of all functions known to Chromium."""
+	d = GetFunctionDict(specFile)
+	funcs = []
+	for func in d.keys():
+		rec = d[func]
+		if not "omit" in rec.chromium:
+			funcs.append(func)
+	funcs.sort()
+	return funcs
+	
+def GetAllFunctionsAndOmittedAliases(specFile = ""):
+	"""Return sorted list of all functions known to Chromium."""
+	d = GetFunctionDict(specFile)
+	funcs = []
+	for func in d.keys():
+		rec = d[func]
+		if (not "omit" in rec.chromium or
+			rec.alias != ''):
+			funcs.append(func)
+	funcs.sort()
+	return funcs
+
+def GetDispatchedFunctions(specFile = ""):
+	"""Return sorted list of all functions handled by SPU dispatch table."""
+	d = GetFunctionDict(specFile)
+	funcs = []
+	for func in d.keys():
+		rec = d[func]
+		if (not "omit" in rec.chromium and
+			not "stub" in rec.chromium and
+			rec.alias == ''):
+			funcs.append(func)
+	funcs.sort()
+	return funcs
+
+#======================================================================
+
+def ReturnType(funcName):
+	"""Return the C return type of named function.
+	Examples: "void" or "const GLubyte *". """
+	d = GetFunctionDict()
+	return d[funcName].returnType
+
+
+def Parameters(funcName):
+	"""Return list of tuples (name, type, vecSize) of function parameters.
+	Example: if funcName=="ClipPlane" return
+	[ ("plane", "GLenum", 0), ("equation", "const GLdouble *", 4) ] """
+	d = GetFunctionDict()
+	return d[funcName].params
+
+def ParamAction(funcName):
+	"""Return list of names of actions for testing.
+	For PackerTest only."""
+	d = GetFunctionDict()
+	return d[funcName].paramaction
+
+def ParamList(funcName):
+	"""Return list of tuples (name, list of values) of function parameters.
+	For PackerTest only."""
+	d = GetFunctionDict()
+	return d[funcName].paramlist
+
+def ParamVec(funcName):
+	"""Return list of tuples (name, vector of values) of function parameters.
+	For PackerTest only."""
+	d = GetFunctionDict()
+	return d[funcName].paramvec
+
+def ParamSet(funcName):
+	"""Return list of tuples (name, list of values) of function parameters.
+	For PackerTest only."""
+	d = GetFunctionDict()
+	return d[funcName].paramset
+
+
+def Properties(funcName):
+	"""Return list of properties of the named GL function."""
+	d = GetFunctionDict()
+	return d[funcName].props
+
+def AllWithProperty(property):
+	"""Return list of functions that have the named property."""
+	funcs = []
+	for funcName in GetDispatchedFunctions():
+		if property in Properties(funcName):
+			funcs.append(funcName)
+	return funcs
+
+def Category(funcName):
+	"""Return the category of the named GL function."""
+	d = GetFunctionDict()
+	return d[funcName].category
+
+def ChromiumProps(funcName):
+	"""Return list of Chromium-specific properties of the named GL function."""
+	d = GetFunctionDict()
+	return d[funcName].chromium
+	
+def ChromiumRelOpCode(funcName):
+	"""Return list of Chromium-specific properties of the named GL function."""
+	d = GetFunctionDict()
+	return d[funcName].chrelopcode
+	
+
+def ParamProps(funcName):
+	"""Return list of Parameter-specific properties of the named GL function."""
+	d = GetFunctionDict()
+	return d[funcName].paramprop
+
+def Alias(funcName):
+	"""Return the function that the named function is an alias of.
+	Ex: Alias('DrawArraysEXT') = 'DrawArrays'.
+	"""
+	d = GetFunctionDict()
+	return d[funcName].alias
+
+
+def ReverseAliases(funcName):
+	"""Return a list of aliases."""
+	d = GetFunctionDict()
+	if funcName in __ReverseAliases:
+		return sorted(__ReverseAliases[funcName])
+	else:
+		return []
+
+
+def ReverseAliasesMaxCount():
+	"""Returns the maximum number of aliases possible for a function."""
+	d = GetFunctionDict()
+	return max([len(a) for a in __ReverseAliases.values()])
+
+
+def NonVectorFunction(funcName):
+	"""Return the non-vector version of the given function, or ''.
+	For example: NonVectorFunction("Color3fv") = "Color3f"."""
+	d = GetFunctionDict()
+	return d[funcName].vectoralias
+
+
+def VectorFunction(funcName):
+	"""Return the vector version of the given non-vector-valued function,
+	or ''.
+	For example: VectorVersion("Color3f") = "Color3fv"."""
+	d = GetFunctionDict()
+	if funcName in __VectorVersion.keys():
+		return __VectorVersion[funcName]
+	else:
+		return ''
+
+
+def GetCategoryWrapper(func_name):
+	"""Return a C preprocessor token to test in order to wrap code.
+	This handles extensions.
+	Example: GetTestWrapper("glActiveTextureARB") = "CR_multitexture"
+	Example: GetTestWrapper("glBegin") = ""
+	"""
+	cat = Category(func_name)
+	if (cat == "1.0" or
+		cat == "1.1" or
+		cat == "1.2" or
+		cat == "Chromium" or
+		cat == "GL_chromium" or
+		cat == "VBox"):
+		return ''
+	elif (cat == '1.3' or
+		  cat == '1.4' or
+		  cat == '1.5' or
+		  cat == '2.0' or
+		  cat == '2.1'):
+		# i.e. OpenGL 1.3 or 1.4 or 1.5
+		return "OPENGL_VERSION_" + cat.replace(".", "_")
+	else:
+		assert cat != ''
+		return cat.replace("GL_", "")
+
+
+def CanCompile(funcName):
+	"""Return 1 if the function can be compiled into display lists, else 0."""
+	props = Properties(funcName)
+	if ("nolist" in props or
+		"get" in props or
+		"setclient" in props):
+		return 0
+	else:
+		return 1
+
+def HasChromiumProperty(funcName, propertyList):
+	"""Return 1 if the function or any alias has any property in the
+	propertyList"""
+	for funcAlias in [funcName, NonVectorFunction(funcName), VectorFunction(funcName)]:
+		if funcAlias:
+			props = ChromiumProps(funcAlias)
+			for p in propertyList:
+				if p in props:
+					return 1
+	return 0
+
+def CanPack(funcName):
+	"""Return 1 if the function can be packed, else 0."""
+	return HasChromiumProperty(funcName, ['pack', 'extpack', 'expandpack'])
+
+def HasPackOpcode(funcName):
+	"""Return 1 if the function has a true pack opcode"""
+	return HasChromiumProperty(funcName, ['pack', 'extpack'])
+
+def SetsState(funcName):
+	"""Return 1 if the function sets server-side state, else 0."""
+	props = Properties(funcName)
+
+	# Exceptions.  The first set of these functions *do* have 
+	# server-side state-changing  effects, but will be missed 
+	# by the general query, because they either render (e.g. 
+	# Bitmap) or do not compile into display lists (e.g. all the others).
+	# 
+	# The second set do *not* have server-side state-changing
+	# effects, despite the fact that they do not render
+	# and can be compiled.  They are control functions
+	# that are not trackable via state.
+	if funcName in ['Bitmap', 'DeleteTextures', 'FeedbackBuffer', 
+		'RenderMode', 'BindBufferARB', 'DeleteFencesNV']:
+		return 1
+	elif funcName in ['ExecuteProgramNV']:
+		return 0
+
+	# All compilable functions that do not render and that do
+	# not set or use client-side state (e.g. DrawArrays, et al.), set
+	# server-side state.
+	if CanCompile(funcName) and "render" not in props and "useclient" not in props and "setclient" not in props:
+		return 1
+
+	# All others don't set server-side state.
+	return 0
+
+def SetsClientState(funcName):
+	"""Return 1 if the function sets client-side state, else 0."""
+	props = Properties(funcName)
+	if "setclient" in props:
+		return 1
+	return 0
+
+def SetsTrackedState(funcName):
+	"""Return 1 if the function sets state that is tracked by
+	the state tracker, else 0."""
+	# These functions set state, but aren't tracked by the state
+	# tracker for various reasons: 
+	# - because the state tracker doesn't manage display lists
+	#   (e.g. CallList and CallLists)
+	# - because the client doesn't have information about what
+	#   the server supports, so the function has to go to the
+	#   server (e.g. CompressedTexImage calls)
+	# - because they require a round-trip to the server (e.g.
+	#   the CopyTexImage calls, SetFenceNV, TrackMatrixNV)
+	if funcName in [
+		'CopyTexImage1D', 'CopyTexImage2D',
+		'CopyTexSubImage1D', 'CopyTexSubImage2D', 'CopyTexSubImage3D',
+		'CallList', 'CallLists',
+		'CompressedTexImage1DARB', 'CompressedTexSubImage1DARB',
+		'CompressedTexImage2DARB', 'CompressedTexSubImage2DARB',
+		'CompressedTexImage3DARB', 'CompressedTexSubImage3DARB',
+		'SetFenceNV'
+		]:
+		return 0
+
+	# Anything else that affects client-side state is trackable.
+	if SetsClientState(funcName):
+		return 1
+
+	# Anything else that doesn't set state at all is certainly
+	# not trackable.
+	if not SetsState(funcName):
+		return 0
+
+	# Per-vertex state isn't tracked the way other state is
+	# tracked, so it is specifically excluded.
+	if "pervertex" in Properties(funcName):
+		return 0
+
+	# Everything else is fine
+	return 1
+
+def UsesClientState(funcName):
+	"""Return 1 if the function uses client-side state, else 0."""
+	props = Properties(funcName)
+	if "pixelstore" in props or "useclient" in props:
+		return 1
+	return 0
+
+def IsQuery(funcName):
+	"""Return 1 if the function returns information to the user, else 0."""
+	props = Properties(funcName)
+	if "get" in props:
+		return 1
+	return 0
+
+def FuncGetsState(funcName):
+	"""Return 1 if the function gets GL state, else 0."""
+	d = GetFunctionDict()
+	props = Properties(funcName)
+	if "get" in props:
+		return 1
+	else:
+		return 0
+
+def IsPointer(dataType):
+	"""Determine if the datatype is a pointer.  Return 1 or 0."""
+	if dataType.find("*") == -1:
+		return 0
+	else:
+		return 1
+
+
+def PointerType(pointerType):
+	"""Return the type of a pointer.
+	Ex: PointerType('const GLubyte *') = 'GLubyte'
+	"""
+	t = pointerType.split(' ')
+	if t[0] == "const":
+		t[0] = t[1]
+	return t[0]
+
+
+
+
+def OpcodeName(funcName):
+	"""Return the C token for the opcode for the given function."""
+	return "CR_" + funcName.upper() + "_OPCODE"
+
+
+def ExtendedOpcodeName(funcName):
+	"""Return the C token for the extended opcode for the given function."""
+	return "CR_" + funcName.upper() + "_EXTEND_OPCODE"
+
+
+
+
+#======================================================================
+
+def _needPointerOrigin(name, type):
+	return type == 'const GLvoid *' and (name == 'pointer' or name == 'NULL');
+
+def MakeCallString(params):
+	"""Given a list of (name, type, vectorSize) parameters, make a C-style
+	formal parameter string.
+	Ex return: 'index, x, y, z'.
+	"""
+	result = ''
+	i = 1
+	n = len(params)
+	for (name, type, vecSize) in params:
+		result += name
+		if i < n:
+			result = result + ', '
+		i += 1
+	#endfor
+	return result
+#enddef
+
+def MakeCallStringForDispatcher(params):
+	"""Same as MakeCallString, but with 'pointer' origin hack for bugref:9407."""
+	strResult = ''
+	fFirst    = True;
+	for (name, type, vecSize) in params:
+		if not fFirst:  strResult += ', ';
+		else:           fFirst     = False;
+		strResult += name;
+		if _needPointerOrigin(name, type):
+			if name != 'NULL': strResult += ', fRealPtr';
+			else:   		   strResult += ', 0 /*fRealPtr*/';
+	return strResult;
+
+
+def MakeDeclarationString(params):
+	"""Given a list of (name, type, vectorSize) parameters, make a C-style
+	parameter declaration string.
+	Ex return: 'GLuint index, GLfloat x, GLfloat y, GLfloat z'.
+	"""
+	n = len(params)
+	if n == 0:
+		return 'void'
+	else:
+		result = ''
+		i = 1
+		for (name, type, vecSize) in params:
+			result = result + type + ' ' + name
+			if i < n:
+				result = result + ', '
+			i += 1
+		#endfor
+		return result
+	#endif
+#enddef
+
+def MakeDeclarationStringForDispatcher(params):
+	"""Same as MakeDeclarationString, but with 'pointer' origin hack for bugref:9407."""
+	if len(params) == 0:
+		return 'void';
+	strResult = '';
+	fFirst    = True;
+	for (name, type, vecSize) in params:
+		if not fFirst:  strResult += ', ';
+		else:           fFirst     = False;
+		strResult = strResult + type + ' ' + name;
+		if _needPointerOrigin(name, type):
+			strResult = strResult + ' CRVBOX_HOST_ONLY_PARAM(int fRealPtr)';
+	return strResult;
+
+def MakeDeclarationStringWithContext(ctx_macro_prefix, params):
+	"""Same as MakeDeclarationString, but adds a context macro
+	"""
+	
+	n = len(params)
+	if n == 0:
+		return ctx_macro_prefix + '_ARGSINGLEDECL'
+	else:
+		result = MakeDeclarationString(params)
+		return ctx_macro_prefix + '_ARGDECL ' + result
+	#endif
+#enddef
+
+
+def MakePrototypeString(params):
+	"""Given a list of (name, type, vectorSize) parameters, make a C-style
+	parameter prototype string (types only).
+	Ex return: 'GLuint, GLfloat, GLfloat, GLfloat'.
+	"""
+	n = len(params)
+	if n == 0:
+		return 'void'
+	else:
+		result = ''
+		i = 1
+		for (name, type, vecSize) in params:
+			result = result + type
+			# see if we need a comma separator
+			if i < n:
+				result = result + ', '
+			i += 1
+		#endfor
+		return result
+	#endif
+#enddef
+
+def MakePrototypeStringForDispatcher(params):
+	"""Same as MakePrototypeString, but with 'pointer' origin hack for bugref:9407."""
+	if len(params) == 0:
+		return 'void'
+	strResult = ''
+	fFirst    = True;
+	for (name, type, vecSize) in params:
+		if not fFirst:  strResult += ', ';
+		else:           fFirst     = False;
+		strResult = strResult + type
+		if _needPointerOrigin(name, type):
+			strResult += ' CRVBOX_HOST_ONLY_PARAM(int)';
+	return strResult;
+
+
+#======================================================================
+	
+__lengths = {
+	'GLbyte': 1,
+	'GLubyte': 1,
+	'GLshort': 2,
+	'GLushort': 2,
+	'GLint': 4,
+	'GLuint': 4,
+	'GLfloat': 4,
+	'GLclampf': 4,
+	'GLdouble': 8,
+	'GLclampd': 8,
+	'GLenum': 4,
+	'GLboolean': 1,
+	'GLsizei': 4,
+	'GLbitfield': 4,
+	'void': 0,  # XXX why?
+	'int': 4,
+	'GLintptrARB': 4,   # XXX or 8 bytes?
+	'GLsizeiptrARB': 4, # XXX or 8 bytes?
+	'VBoxGLhandleARB': 4,
+	'GLcharARB': 1,
+	'uintptr_t': 4
+}
+
+def sizeof(type):
+	"""Return size of C datatype, in bytes."""
+	if not type in __lengths.keys():
+		print >>sys.stderr, "%s not in lengths!" % type
+	return __lengths[type]
+
+
+#======================================================================
+align_types = 1
+
+def FixAlignment( pos, alignment ):
+	# if we want double-alignment take word-alignment instead,
+	# yes, this is super-lame, but we know what we are doing
+	if alignment > 4:
+		alignment = 4
+	if align_types and alignment and ( pos % alignment ):
+		pos += alignment - ( pos % alignment )
+	return pos
+
+def WordAlign( pos ):
+	return FixAlignment( pos, 4 )
+
+def PointerSize():
+	return 8 # Leave room for a 64 bit pointer
+
+def PacketLength( params ):
+	len = 0
+	for (name, type, vecSize) in params:
+		if IsPointer(type):
+			size = PointerSize()
+		else:
+			assert type.find("const") == -1
+			size = sizeof(type)
+		len = FixAlignment( len, size ) + size
+	len = WordAlign( len )
+	return len
+
+#======================================================================
+
+__specials = {}
+
+def LoadSpecials( filename ):
+	table = {}
+	try:
+		f = open( filename, "r" )
+	except:
+#		try:
+		f = open( sys.argv[2]+"/"+filename, "r")
+#		except:
+#			__specials[filename] = {}
+#			print "%s not present" % filename
+#			return {}
+	
+	for line in f.readlines():
+		line = line.strip()
+		if line == "" or line[0] == '#':
+			continue
+		table[line] = 1
+	
+	__specials[filename] = table
+	return table
+
+
+def FindSpecial( table_file, glName ):
+	table = {}
+	filename = table_file + "_special"
+	try:
+		table = __specials[filename]
+	except KeyError:
+		table = LoadSpecials( filename )
+	
+	try:
+		if (table[glName] == 1):
+			return 1
+		else:
+			return 0 #should never happen
+	except KeyError:
+		return 0
+
+
+def AllSpecials( table_file ):
+	table = {}
+	filename = table_file + "_special"
+	try:
+		table = __specials[filename]
+	except KeyError:
+		table = LoadSpecials( filename )
+	
+	return sorted(table.keys())
+
+
+def NumSpecials( table_file ):
+	filename = table_file + "_special"
+	table = {}
+	try:
+		table = __specials[filename]
+	except KeyError:
+		table = LoadSpecials(filename)
+	return len(table.keys())
+
+def PrintRecord(record):
+	argList = MakeDeclarationString(record.params)
+	if record.category == "Chromium":
+		prefix = "cr"
+	else:
+		prefix = "gl"
+	print('%s %s%s(%s);' % (record.returnType, prefix, record.name, argList ))
+	if len(record.props) > 0:
+		print('   /* %s */' % string.join(record.props, ' '))
+
+#ProcessSpecFile("APIspec.txt", PrintRecord)
+
Index: /trunk/src/VBox/GuestHost/OpenGL/include/GL/glext.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/GL/glext.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/GL/glext.h	(revision 86648)
@@ -0,0 +1,7669 @@
+#ifndef __glext_h_
+#define __glext_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2007 The Khronos Group Inc.
+** 
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+** 
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+** 
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define WIN32_LEAN_AND_MEAN 1
+# ifdef VBOX
+#  include <iprt/win/windows.h>
+# else
+#include <windows.h>
+# endif
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+/*************************************************************/
+
+/* Header file version number, required by OpenGL ABI for Linux */
+/* glext.h last updated 2008/08/10 */
+/* Current version at http://www.opengl.org/registry/ */
+#define GL_GLEXT_VERSION 41
+
+#ifndef GL_VERSION_1_2
+#define GL_UNSIGNED_BYTE_3_3_2            0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4         0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1         0x8034
+#define GL_UNSIGNED_INT_8_8_8_8           0x8035
+#define GL_UNSIGNED_INT_10_10_10_2        0x8036
+#define GL_RESCALE_NORMAL                 0x803A
+#define GL_TEXTURE_BINDING_3D             0x806A
+#define GL_PACK_SKIP_IMAGES               0x806B
+#define GL_PACK_IMAGE_HEIGHT              0x806C
+#define GL_UNPACK_SKIP_IMAGES             0x806D
+#define GL_UNPACK_IMAGE_HEIGHT            0x806E
+#define GL_TEXTURE_3D                     0x806F
+#define GL_PROXY_TEXTURE_3D               0x8070
+#define GL_TEXTURE_DEPTH                  0x8071
+#define GL_TEXTURE_WRAP_R                 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE            0x8073
+#define GL_UNSIGNED_BYTE_2_3_3_REV        0x8362
+#define GL_UNSIGNED_SHORT_5_6_5           0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV       0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV     0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV     0x8366
+#define GL_UNSIGNED_INT_8_8_8_8_REV       0x8367
+#define GL_UNSIGNED_INT_2_10_10_10_REV    0x8368
+#define GL_BGR                            0x80E0
+#define GL_BGRA                           0x80E1
+#define GL_MAX_ELEMENTS_VERTICES          0x80E8
+#define GL_MAX_ELEMENTS_INDICES           0x80E9
+#define GL_CLAMP_TO_EDGE                  0x812F
+#define GL_TEXTURE_MIN_LOD                0x813A
+#define GL_TEXTURE_MAX_LOD                0x813B
+#define GL_TEXTURE_BASE_LEVEL             0x813C
+#define GL_TEXTURE_MAX_LEVEL              0x813D
+#define GL_LIGHT_MODEL_COLOR_CONTROL      0x81F8
+#define GL_SINGLE_COLOR                   0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR        0x81FA
+#define GL_SMOOTH_POINT_SIZE_RANGE        0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY  0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE        0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY  0x0B23
+#define GL_ALIASED_POINT_SIZE_RANGE       0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE       0x846E
+#endif
+
+#ifndef GL_ARB_imaging
+#define GL_CONSTANT_COLOR                 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR       0x8002
+#define GL_CONSTANT_ALPHA                 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA       0x8004
+#define GL_BLEND_COLOR                    0x8005
+#define GL_FUNC_ADD                       0x8006
+#define GL_MIN                            0x8007
+#define GL_MAX                            0x8008
+#define GL_BLEND_EQUATION                 0x8009
+#define GL_FUNC_SUBTRACT                  0x800A
+#define GL_FUNC_REVERSE_SUBTRACT          0x800B
+#define GL_CONVOLUTION_1D                 0x8010
+#define GL_CONVOLUTION_2D                 0x8011
+#define GL_SEPARABLE_2D                   0x8012
+#define GL_CONVOLUTION_BORDER_MODE        0x8013
+#define GL_CONVOLUTION_FILTER_SCALE       0x8014
+#define GL_CONVOLUTION_FILTER_BIAS        0x8015
+#define GL_REDUCE                         0x8016
+#define GL_CONVOLUTION_FORMAT             0x8017
+#define GL_CONVOLUTION_WIDTH              0x8018
+#define GL_CONVOLUTION_HEIGHT             0x8019
+#define GL_MAX_CONVOLUTION_WIDTH          0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT         0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE     0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE   0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE    0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE   0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS      0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS    0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS     0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS    0x8023
+#define GL_HISTOGRAM                      0x8024
+#define GL_PROXY_HISTOGRAM                0x8025
+#define GL_HISTOGRAM_WIDTH                0x8026
+#define GL_HISTOGRAM_FORMAT               0x8027
+#define GL_HISTOGRAM_RED_SIZE             0x8028
+#define GL_HISTOGRAM_GREEN_SIZE           0x8029
+#define GL_HISTOGRAM_BLUE_SIZE            0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE           0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE       0x802C
+#define GL_HISTOGRAM_SINK                 0x802D
+#define GL_MINMAX                         0x802E
+#define GL_MINMAX_FORMAT                  0x802F
+#define GL_MINMAX_SINK                    0x8030
+#define GL_TABLE_TOO_LARGE                0x8031
+#define GL_COLOR_MATRIX                   0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH       0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH   0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE    0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE  0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE   0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE  0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS     0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS   0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS    0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS   0x80BB
+#define GL_COLOR_TABLE                    0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE   0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE  0x80D2
+#define GL_PROXY_COLOR_TABLE              0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
+#define GL_COLOR_TABLE_SCALE              0x80D6
+#define GL_COLOR_TABLE_BIAS               0x80D7
+#define GL_COLOR_TABLE_FORMAT             0x80D8
+#define GL_COLOR_TABLE_WIDTH              0x80D9
+#define GL_COLOR_TABLE_RED_SIZE           0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE         0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE          0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE         0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE     0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE     0x80DF
+#define GL_CONSTANT_BORDER                0x8151
+#define GL_REPLICATE_BORDER               0x8153
+#define GL_CONVOLUTION_BORDER_COLOR       0x8154
+#endif
+
+#ifndef GL_VERSION_1_3
+#define GL_TEXTURE0                       0x84C0
+#define GL_TEXTURE1                       0x84C1
+#define GL_TEXTURE2                       0x84C2
+#define GL_TEXTURE3                       0x84C3
+#define GL_TEXTURE4                       0x84C4
+#define GL_TEXTURE5                       0x84C5
+#define GL_TEXTURE6                       0x84C6
+#define GL_TEXTURE7                       0x84C7
+#define GL_TEXTURE8                       0x84C8
+#define GL_TEXTURE9                       0x84C9
+#define GL_TEXTURE10                      0x84CA
+#define GL_TEXTURE11                      0x84CB
+#define GL_TEXTURE12                      0x84CC
+#define GL_TEXTURE13                      0x84CD
+#define GL_TEXTURE14                      0x84CE
+#define GL_TEXTURE15                      0x84CF
+#define GL_TEXTURE16                      0x84D0
+#define GL_TEXTURE17                      0x84D1
+#define GL_TEXTURE18                      0x84D2
+#define GL_TEXTURE19                      0x84D3
+#define GL_TEXTURE20                      0x84D4
+#define GL_TEXTURE21                      0x84D5
+#define GL_TEXTURE22                      0x84D6
+#define GL_TEXTURE23                      0x84D7
+#define GL_TEXTURE24                      0x84D8
+#define GL_TEXTURE25                      0x84D9
+#define GL_TEXTURE26                      0x84DA
+#define GL_TEXTURE27                      0x84DB
+#define GL_TEXTURE28                      0x84DC
+#define GL_TEXTURE29                      0x84DD
+#define GL_TEXTURE30                      0x84DE
+#define GL_TEXTURE31                      0x84DF
+#define GL_ACTIVE_TEXTURE                 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE          0x84E1
+#define GL_MAX_TEXTURE_UNITS              0x84E2
+#define GL_TRANSPOSE_MODELVIEW_MATRIX     0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX    0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX       0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX         0x84E6
+#define GL_MULTISAMPLE                    0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE            0x809F
+#define GL_SAMPLE_COVERAGE                0x80A0
+#define GL_SAMPLE_BUFFERS                 0x80A8
+#define GL_SAMPLES                        0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE          0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT         0x80AB
+#define GL_MULTISAMPLE_BIT                0x20000000
+#define GL_NORMAL_MAP                     0x8511
+#define GL_REFLECTION_MAP                 0x8512
+#define GL_TEXTURE_CUBE_MAP               0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP       0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X    0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X    0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y    0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y    0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z    0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z    0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP         0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE      0x851C
+#define GL_COMPRESSED_ALPHA               0x84E9
+#define GL_COMPRESSED_LUMINANCE           0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA     0x84EB
+#define GL_COMPRESSED_INTENSITY           0x84EC
+#define GL_COMPRESSED_RGB                 0x84ED
+#define GL_COMPRESSED_RGBA                0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT       0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE  0x86A0
+#define GL_TEXTURE_COMPRESSED             0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS     0x86A3
+#define GL_CLAMP_TO_BORDER                0x812D
+#define GL_COMBINE                        0x8570
+#define GL_COMBINE_RGB                    0x8571
+#define GL_COMBINE_ALPHA                  0x8572
+#define GL_SOURCE0_RGB                    0x8580
+#define GL_SOURCE1_RGB                    0x8581
+#define GL_SOURCE2_RGB                    0x8582
+#define GL_SOURCE0_ALPHA                  0x8588
+#define GL_SOURCE1_ALPHA                  0x8589
+#define GL_SOURCE2_ALPHA                  0x858A
+#define GL_OPERAND0_RGB                   0x8590
+#define GL_OPERAND1_RGB                   0x8591
+#define GL_OPERAND2_RGB                   0x8592
+#define GL_OPERAND0_ALPHA                 0x8598
+#define GL_OPERAND1_ALPHA                 0x8599
+#define GL_OPERAND2_ALPHA                 0x859A
+#define GL_RGB_SCALE                      0x8573
+#define GL_ADD_SIGNED                     0x8574
+#define GL_INTERPOLATE                    0x8575
+#define GL_SUBTRACT                       0x84E7
+#define GL_CONSTANT                       0x8576
+#define GL_PRIMARY_COLOR                  0x8577
+#define GL_PREVIOUS                       0x8578
+#define GL_DOT3_RGB                       0x86AE
+#define GL_DOT3_RGBA                      0x86AF
+#endif
+
+#ifndef GL_VERSION_1_4
+#define GL_BLEND_DST_RGB                  0x80C8
+#define GL_BLEND_SRC_RGB                  0x80C9
+#define GL_BLEND_DST_ALPHA                0x80CA
+#define GL_BLEND_SRC_ALPHA                0x80CB
+#define GL_POINT_SIZE_MIN                 0x8126
+#define GL_POINT_SIZE_MAX                 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE      0x8128
+#define GL_POINT_DISTANCE_ATTENUATION     0x8129
+#define GL_GENERATE_MIPMAP                0x8191
+#define GL_GENERATE_MIPMAP_HINT           0x8192
+#define GL_DEPTH_COMPONENT16              0x81A5
+#define GL_DEPTH_COMPONENT24              0x81A6
+#define GL_DEPTH_COMPONENT32              0x81A7
+#define GL_MIRRORED_REPEAT                0x8370
+#define GL_FOG_COORDINATE_SOURCE          0x8450
+#define GL_FOG_COORDINATE                 0x8451
+#define GL_FRAGMENT_DEPTH                 0x8452
+#define GL_CURRENT_FOG_COORDINATE         0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE      0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE    0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER   0x8456
+#define GL_FOG_COORDINATE_ARRAY           0x8457
+#define GL_COLOR_SUM                      0x8458
+#define GL_CURRENT_SECONDARY_COLOR        0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE     0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE     0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE   0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER  0x845D
+#define GL_SECONDARY_COLOR_ARRAY          0x845E
+#define GL_MAX_TEXTURE_LOD_BIAS           0x84FD
+#define GL_TEXTURE_FILTER_CONTROL         0x8500
+#define GL_TEXTURE_LOD_BIAS               0x8501
+#define GL_INCR_WRAP                      0x8507
+#define GL_DECR_WRAP                      0x8508
+#define GL_TEXTURE_DEPTH_SIZE             0x884A
+#define GL_DEPTH_TEXTURE_MODE             0x884B
+#define GL_TEXTURE_COMPARE_MODE           0x884C
+#define GL_TEXTURE_COMPARE_FUNC           0x884D
+#define GL_COMPARE_R_TO_TEXTURE           0x884E
+#endif
+
+#ifndef GL_VERSION_1_5
+#define GL_BUFFER_SIZE                    0x8764
+#define GL_BUFFER_USAGE                   0x8765
+#define GL_QUERY_COUNTER_BITS             0x8864
+#define GL_CURRENT_QUERY                  0x8865
+#define GL_QUERY_RESULT                   0x8866
+#define GL_QUERY_RESULT_AVAILABLE         0x8867
+#define GL_ARRAY_BUFFER                   0x8892
+#define GL_ELEMENT_ARRAY_BUFFER           0x8893
+#define GL_ARRAY_BUFFER_BINDING           0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING   0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING    0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING    0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING     0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING     0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING    0x889E
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_READ_ONLY                      0x88B8
+#define GL_WRITE_ONLY                     0x88B9
+#define GL_READ_WRITE                     0x88BA
+#define GL_BUFFER_ACCESS                  0x88BB
+#define GL_BUFFER_MAPPED                  0x88BC
+#define GL_BUFFER_MAP_POINTER             0x88BD
+#define GL_STREAM_DRAW                    0x88E0
+#define GL_STREAM_READ                    0x88E1
+#define GL_STREAM_COPY                    0x88E2
+#define GL_STATIC_DRAW                    0x88E4
+#define GL_STATIC_READ                    0x88E5
+#define GL_STATIC_COPY                    0x88E6
+#define GL_DYNAMIC_DRAW                   0x88E8
+#define GL_DYNAMIC_READ                   0x88E9
+#define GL_DYNAMIC_COPY                   0x88EA
+#define GL_SAMPLES_PASSED                 0x8914
+#define GL_FOG_COORD_SRC                  GL_FOG_COORDINATE_SOURCE
+#define GL_FOG_COORD                      GL_FOG_COORDINATE
+#define GL_CURRENT_FOG_COORD              GL_CURRENT_FOG_COORDINATE
+#define GL_FOG_COORD_ARRAY_TYPE           GL_FOG_COORDINATE_ARRAY_TYPE
+#define GL_FOG_COORD_ARRAY_STRIDE         GL_FOG_COORDINATE_ARRAY_STRIDE
+#define GL_FOG_COORD_ARRAY_POINTER        GL_FOG_COORDINATE_ARRAY_POINTER
+#define GL_FOG_COORD_ARRAY                GL_FOG_COORDINATE_ARRAY
+#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+#define GL_SRC0_RGB                       GL_SOURCE0_RGB
+#define GL_SRC1_RGB                       GL_SOURCE1_RGB
+#define GL_SRC2_RGB                       GL_SOURCE2_RGB
+#define GL_SRC0_ALPHA                     GL_SOURCE0_ALPHA
+#define GL_SRC1_ALPHA                     GL_SOURCE1_ALPHA
+#define GL_SRC2_ALPHA                     GL_SOURCE2_ALPHA
+#endif
+
+#ifndef GL_VERSION_2_0
+#define GL_BLEND_EQUATION_RGB             GL_BLEND_EQUATION
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED    0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE       0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE     0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE       0x8625
+#define GL_CURRENT_VERTEX_ATTRIB          0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE      0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE        0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER    0x8645
+#define GL_STENCIL_BACK_FUNC              0x8800
+#define GL_STENCIL_BACK_FAIL              0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL   0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS   0x8803
+#define GL_MAX_DRAW_BUFFERS               0x8824
+#define GL_DRAW_BUFFER0                   0x8825
+#define GL_DRAW_BUFFER1                   0x8826
+#define GL_DRAW_BUFFER2                   0x8827
+#define GL_DRAW_BUFFER3                   0x8828
+#define GL_DRAW_BUFFER4                   0x8829
+#define GL_DRAW_BUFFER5                   0x882A
+#define GL_DRAW_BUFFER6                   0x882B
+#define GL_DRAW_BUFFER7                   0x882C
+#define GL_DRAW_BUFFER8                   0x882D
+#define GL_DRAW_BUFFER9                   0x882E
+#define GL_DRAW_BUFFER10                  0x882F
+#define GL_DRAW_BUFFER11                  0x8830
+#define GL_DRAW_BUFFER12                  0x8831
+#define GL_DRAW_BUFFER13                  0x8832
+#define GL_DRAW_BUFFER14                  0x8833
+#define GL_DRAW_BUFFER15                  0x8834
+#define GL_BLEND_EQUATION_ALPHA           0x883D
+#define GL_POINT_SPRITE                   0x8861
+#define GL_COORD_REPLACE                  0x8862
+#define GL_MAX_VERTEX_ATTRIBS             0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_MAX_TEXTURE_COORDS             0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS        0x8872
+#define GL_FRAGMENT_SHADER                0x8B30
+#define GL_VERTEX_SHADER                  0x8B31
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS  0x8B4A
+#define GL_MAX_VARYING_FLOATS             0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_SHADER_TYPE                    0x8B4F
+#define GL_FLOAT_VEC2                     0x8B50
+#define GL_FLOAT_VEC3                     0x8B51
+#define GL_FLOAT_VEC4                     0x8B52
+#define GL_INT_VEC2                       0x8B53
+#define GL_INT_VEC3                       0x8B54
+#define GL_INT_VEC4                       0x8B55
+#define GL_BOOL                           0x8B56
+#define GL_BOOL_VEC2                      0x8B57
+#define GL_BOOL_VEC3                      0x8B58
+#define GL_BOOL_VEC4                      0x8B59
+#define GL_FLOAT_MAT2                     0x8B5A
+#define GL_FLOAT_MAT3                     0x8B5B
+#define GL_FLOAT_MAT4                     0x8B5C
+#define GL_SAMPLER_1D                     0x8B5D
+#define GL_SAMPLER_2D                     0x8B5E
+#define GL_SAMPLER_3D                     0x8B5F
+#define GL_SAMPLER_CUBE                   0x8B60
+#define GL_SAMPLER_1D_SHADOW              0x8B61
+#define GL_SAMPLER_2D_SHADOW              0x8B62
+#define GL_DELETE_STATUS                  0x8B80
+#define GL_COMPILE_STATUS                 0x8B81
+#define GL_LINK_STATUS                    0x8B82
+#define GL_VALIDATE_STATUS                0x8B83
+#define GL_INFO_LOG_LENGTH                0x8B84
+#define GL_ATTACHED_SHADERS               0x8B85
+#define GL_ACTIVE_UNIFORMS                0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH      0x8B87
+#define GL_SHADER_SOURCE_LENGTH           0x8B88
+#define GL_ACTIVE_ATTRIBUTES              0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH    0x8B8A
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_SHADING_LANGUAGE_VERSION       0x8B8C
+#define GL_CURRENT_PROGRAM                0x8B8D
+#define GL_POINT_SPRITE_COORD_ORIGIN      0x8CA0
+#define GL_LOWER_LEFT                     0x8CA1
+#define GL_UPPER_LEFT                     0x8CA2
+#define GL_STENCIL_BACK_REF               0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK        0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK         0x8CA5
+#endif
+
+#ifndef GL_VERSION_2_1
+#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F
+#define GL_PIXEL_PACK_BUFFER              0x88EB
+#define GL_PIXEL_UNPACK_BUFFER            0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING      0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING    0x88EF
+#define GL_FLOAT_MAT2x3                   0x8B65
+#define GL_FLOAT_MAT2x4                   0x8B66
+#define GL_FLOAT_MAT3x2                   0x8B67
+#define GL_FLOAT_MAT3x4                   0x8B68
+#define GL_FLOAT_MAT4x2                   0x8B69
+#define GL_FLOAT_MAT4x3                   0x8B6A
+#define GL_SRGB                           0x8C40
+#define GL_SRGB8                          0x8C41
+#define GL_SRGB_ALPHA                     0x8C42
+#define GL_SRGB8_ALPHA8                   0x8C43
+#define GL_SLUMINANCE_ALPHA               0x8C44
+#define GL_SLUMINANCE8_ALPHA8             0x8C45
+#define GL_SLUMINANCE                     0x8C46
+#define GL_SLUMINANCE8                    0x8C47
+#define GL_COMPRESSED_SRGB                0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA          0x8C49
+#define GL_COMPRESSED_SLUMINANCE          0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA    0x8C4B
+#endif
+
+#ifndef GL_VERSION_3_0
+#define GL_COMPARE_REF_TO_TEXTURE         GL_COMPARE_R_TO_TEXTURE_ARB
+#define GL_CLIP_DISTANCE0                 GL_CLIP_PLANE0
+#define GL_CLIP_DISTANCE1                 GL_CLIP_PLANE1
+#define GL_CLIP_DISTANCE2                 GL_CLIP_PLANE2
+#define GL_CLIP_DISTANCE3                 GL_CLIP_PLANE3
+#define GL_CLIP_DISTANCE4                 GL_CLIP_PLANE4
+#define GL_CLIP_DISTANCE5                 GL_CLIP_PLANE5
+#define GL_MAX_CLIP_DISTANCES             GL_MAX_CLIP_PLANES
+#define GL_MAJOR_VERSION                  0x821B
+#define GL_MINOR_VERSION                  0x821C
+#define GL_NUM_EXTENSIONS                 0x821D
+#define GL_CONTEXT_FLAGS                  0x821E
+#define GL_DEPTH_BUFFER                   0x8223
+#define GL_STENCIL_BUFFER                 0x8224
+#define GL_COMPRESSED_RED                 0x8225
+#define GL_COMPRESSED_RG                  0x8226
+#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001
+#define GL_RGBA32F                        0x8814
+#define GL_RGB32F                         0x8815
+#define GL_RGBA16F                        0x881A
+#define GL_RGB16F                         0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER    0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS       0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET       0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET       0x8905
+#define GL_CLAMP_VERTEX_COLOR             0x891A
+#define GL_CLAMP_FRAGMENT_COLOR           0x891B
+#define GL_CLAMP_READ_COLOR               0x891C
+#define GL_FIXED_ONLY                     0x891D
+#define GL_MAX_VARYING_COMPONENTS         GL_MAX_VARYING_FLOATS
+#define GL_TEXTURE_RED_TYPE               0x8C10
+#define GL_TEXTURE_GREEN_TYPE             0x8C11
+#define GL_TEXTURE_BLUE_TYPE              0x8C12
+#define GL_TEXTURE_ALPHA_TYPE             0x8C13
+#define GL_TEXTURE_LUMINANCE_TYPE         0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE         0x8C15
+#define GL_TEXTURE_DEPTH_TYPE             0x8C16
+#define GL_UNSIGNED_NORMALIZED            0x8C17
+#define GL_TEXTURE_1D_ARRAY               0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY         0x8C19
+#define GL_TEXTURE_2D_ARRAY               0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY         0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY       0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY       0x8C1D
+#define GL_R11F_G11F_B10F                 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV   0x8C3B
+#define GL_RGB9_E5                        0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV       0x8C3E
+#define GL_TEXTURE_SHARED_SIZE            0x8C3F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS    0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_PRIMITIVES_GENERATED           0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_RASTERIZER_DISCARD             0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS            0x8C8C
+#define GL_SEPARATE_ATTRIBS               0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER      0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_RGBA32UI                       0x8D70
+#define GL_RGB32UI                        0x8D71
+#define GL_RGBA16UI                       0x8D76
+#define GL_RGB16UI                        0x8D77
+#define GL_RGBA8UI                        0x8D7C
+#define GL_RGB8UI                         0x8D7D
+#define GL_RGBA32I                        0x8D82
+#define GL_RGB32I                         0x8D83
+#define GL_RGBA16I                        0x8D88
+#define GL_RGB16I                         0x8D89
+#define GL_RGBA8I                         0x8D8E
+#define GL_RGB8I                          0x8D8F
+#define GL_RED_INTEGER                    0x8D94
+#define GL_GREEN_INTEGER                  0x8D95
+#define GL_BLUE_INTEGER                   0x8D96
+#define GL_ALPHA_INTEGER                  0x8D97
+#define GL_RGB_INTEGER                    0x8D98
+#define GL_RGBA_INTEGER                   0x8D99
+#define GL_BGR_INTEGER                    0x8D9A
+#define GL_BGRA_INTEGER                   0x8D9B
+#define GL_SAMPLER_1D_ARRAY               0x8DC0
+#define GL_SAMPLER_2D_ARRAY               0x8DC1
+#define GL_SAMPLER_1D_ARRAY_SHADOW        0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW        0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW            0x8DC5
+#define GL_UNSIGNED_INT_VEC2              0x8DC6
+#define GL_UNSIGNED_INT_VEC3              0x8DC7
+#define GL_UNSIGNED_INT_VEC4              0x8DC8
+#define GL_INT_SAMPLER_1D                 0x8DC9
+#define GL_INT_SAMPLER_2D                 0x8DCA
+#define GL_INT_SAMPLER_3D                 0x8DCB
+#define GL_INT_SAMPLER_CUBE               0x8DCC
+#define GL_INT_SAMPLER_1D_ARRAY           0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY           0x8DCF
+#define GL_UNSIGNED_INT_SAMPLER_1D        0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D        0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D        0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE      0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY  0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY  0x8DD7
+#define GL_QUERY_WAIT                     0x8E13
+#define GL_QUERY_NO_WAIT                  0x8E14
+#define GL_QUERY_BY_REGION_WAIT           0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT        0x8E16
+#endif
+
+#ifndef GL_ARB_multitexture
+#define GL_TEXTURE0_ARB                   0x84C0
+#define GL_TEXTURE1_ARB                   0x84C1
+#define GL_TEXTURE2_ARB                   0x84C2
+#define GL_TEXTURE3_ARB                   0x84C3
+#define GL_TEXTURE4_ARB                   0x84C4
+#define GL_TEXTURE5_ARB                   0x84C5
+#define GL_TEXTURE6_ARB                   0x84C6
+#define GL_TEXTURE7_ARB                   0x84C7
+#define GL_TEXTURE8_ARB                   0x84C8
+#define GL_TEXTURE9_ARB                   0x84C9
+#define GL_TEXTURE10_ARB                  0x84CA
+#define GL_TEXTURE11_ARB                  0x84CB
+#define GL_TEXTURE12_ARB                  0x84CC
+#define GL_TEXTURE13_ARB                  0x84CD
+#define GL_TEXTURE14_ARB                  0x84CE
+#define GL_TEXTURE15_ARB                  0x84CF
+#define GL_TEXTURE16_ARB                  0x84D0
+#define GL_TEXTURE17_ARB                  0x84D1
+#define GL_TEXTURE18_ARB                  0x84D2
+#define GL_TEXTURE19_ARB                  0x84D3
+#define GL_TEXTURE20_ARB                  0x84D4
+#define GL_TEXTURE21_ARB                  0x84D5
+#define GL_TEXTURE22_ARB                  0x84D6
+#define GL_TEXTURE23_ARB                  0x84D7
+#define GL_TEXTURE24_ARB                  0x84D8
+#define GL_TEXTURE25_ARB                  0x84D9
+#define GL_TEXTURE26_ARB                  0x84DA
+#define GL_TEXTURE27_ARB                  0x84DB
+#define GL_TEXTURE28_ARB                  0x84DC
+#define GL_TEXTURE29_ARB                  0x84DD
+#define GL_TEXTURE30_ARB                  0x84DE
+#define GL_TEXTURE31_ARB                  0x84DF
+#define GL_ACTIVE_TEXTURE_ARB             0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB      0x84E1
+#define GL_MAX_TEXTURE_UNITS_ARB          0x84E2
+#endif
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB   0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX_ARB     0x84E6
+#endif
+
+#ifndef GL_ARB_multisample
+#define GL_MULTISAMPLE_ARB                0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB   0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB        0x809F
+#define GL_SAMPLE_COVERAGE_ARB            0x80A0
+#define GL_SAMPLE_BUFFERS_ARB             0x80A8
+#define GL_SAMPLES_ARB                    0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB      0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT_ARB     0x80AB
+#define GL_MULTISAMPLE_BIT_ARB            0x20000000
+#endif
+
+#ifndef GL_ARB_texture_env_add
+#endif
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_NORMAL_MAP_ARB                 0x8511
+#define GL_REFLECTION_MAP_ARB             0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB           0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB   0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB     0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB  0x851C
+#endif
+
+#ifndef GL_ARB_texture_compression
+#define GL_COMPRESSED_ALPHA_ARB           0x84E9
+#define GL_COMPRESSED_LUMINANCE_ARB       0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB
+#define GL_COMPRESSED_INTENSITY_ARB       0x84EC
+#define GL_COMPRESSED_RGB_ARB             0x84ED
+#define GL_COMPRESSED_RGBA_ARB            0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT_ARB   0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0
+#define GL_TEXTURE_COMPRESSED_ARB         0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3
+#endif
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_CLAMP_TO_BORDER_ARB            0x812D
+#endif
+
+#ifndef GL_ARB_point_parameters
+#define GL_POINT_SIZE_MIN_ARB             0x8126
+#define GL_POINT_SIZE_MAX_ARB             0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB  0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+#endif
+
+#ifndef GL_ARB_vertex_blend
+#define GL_MAX_VERTEX_UNITS_ARB           0x86A4
+#define GL_ACTIVE_VERTEX_UNITS_ARB        0x86A5
+#define GL_WEIGHT_SUM_UNITY_ARB           0x86A6
+#define GL_VERTEX_BLEND_ARB               0x86A7
+#define GL_CURRENT_WEIGHT_ARB             0x86A8
+#define GL_WEIGHT_ARRAY_TYPE_ARB          0x86A9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB        0x86AA
+#define GL_WEIGHT_ARRAY_SIZE_ARB          0x86AB
+#define GL_WEIGHT_ARRAY_POINTER_ARB       0x86AC
+#define GL_WEIGHT_ARRAY_ARB               0x86AD
+#define GL_MODELVIEW0_ARB                 0x1700
+#define GL_MODELVIEW1_ARB                 0x850A
+#define GL_MODELVIEW2_ARB                 0x8722
+#define GL_MODELVIEW3_ARB                 0x8723
+#define GL_MODELVIEW4_ARB                 0x8724
+#define GL_MODELVIEW5_ARB                 0x8725
+#define GL_MODELVIEW6_ARB                 0x8726
+#define GL_MODELVIEW7_ARB                 0x8727
+#define GL_MODELVIEW8_ARB                 0x8728
+#define GL_MODELVIEW9_ARB                 0x8729
+#define GL_MODELVIEW10_ARB                0x872A
+#define GL_MODELVIEW11_ARB                0x872B
+#define GL_MODELVIEW12_ARB                0x872C
+#define GL_MODELVIEW13_ARB                0x872D
+#define GL_MODELVIEW14_ARB                0x872E
+#define GL_MODELVIEW15_ARB                0x872F
+#define GL_MODELVIEW16_ARB                0x8730
+#define GL_MODELVIEW17_ARB                0x8731
+#define GL_MODELVIEW18_ARB                0x8732
+#define GL_MODELVIEW19_ARB                0x8733
+#define GL_MODELVIEW20_ARB                0x8734
+#define GL_MODELVIEW21_ARB                0x8735
+#define GL_MODELVIEW22_ARB                0x8736
+#define GL_MODELVIEW23_ARB                0x8737
+#define GL_MODELVIEW24_ARB                0x8738
+#define GL_MODELVIEW25_ARB                0x8739
+#define GL_MODELVIEW26_ARB                0x873A
+#define GL_MODELVIEW27_ARB                0x873B
+#define GL_MODELVIEW28_ARB                0x873C
+#define GL_MODELVIEW29_ARB                0x873D
+#define GL_MODELVIEW30_ARB                0x873E
+#define GL_MODELVIEW31_ARB                0x873F
+#endif
+
+#ifndef GL_ARB_matrix_palette
+#define GL_MATRIX_PALETTE_ARB             0x8840
+#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841
+#define GL_MAX_PALETTE_MATRICES_ARB       0x8842
+#define GL_CURRENT_PALETTE_MATRIX_ARB     0x8843
+#define GL_MATRIX_INDEX_ARRAY_ARB         0x8844
+#define GL_CURRENT_MATRIX_INDEX_ARB       0x8845
+#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB    0x8846
+#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB    0x8847
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB  0x8848
+#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849
+#endif
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_COMBINE_ARB                    0x8570
+#define GL_COMBINE_RGB_ARB                0x8571
+#define GL_COMBINE_ALPHA_ARB              0x8572
+#define GL_SOURCE0_RGB_ARB                0x8580
+#define GL_SOURCE1_RGB_ARB                0x8581
+#define GL_SOURCE2_RGB_ARB                0x8582
+#define GL_SOURCE0_ALPHA_ARB              0x8588
+#define GL_SOURCE1_ALPHA_ARB              0x8589
+#define GL_SOURCE2_ALPHA_ARB              0x858A
+#define GL_OPERAND0_RGB_ARB               0x8590
+#define GL_OPERAND1_RGB_ARB               0x8591
+#define GL_OPERAND2_RGB_ARB               0x8592
+#define GL_OPERAND0_ALPHA_ARB             0x8598
+#define GL_OPERAND1_ALPHA_ARB             0x8599
+#define GL_OPERAND2_ALPHA_ARB             0x859A
+#define GL_RGB_SCALE_ARB                  0x8573
+#define GL_ADD_SIGNED_ARB                 0x8574
+#define GL_INTERPOLATE_ARB                0x8575
+#define GL_SUBTRACT_ARB                   0x84E7
+#define GL_CONSTANT_ARB                   0x8576
+#define GL_PRIMARY_COLOR_ARB              0x8577
+#define GL_PREVIOUS_ARB                   0x8578
+#endif
+
+#ifndef GL_ARB_texture_env_crossbar
+#endif
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_DOT3_RGB_ARB                   0x86AE
+#define GL_DOT3_RGBA_ARB                  0x86AF
+#endif
+
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_MIRRORED_REPEAT_ARB            0x8370
+#endif
+
+#ifndef GL_ATI_texture_mirror_once
+#define GL_MIRROR_CLAMP_ATI               0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI       0x8743
+#endif
+
+#ifndef GL_ARB_depth_texture
+#define GL_DEPTH_COMPONENT16_ARB          0x81A5
+#define GL_DEPTH_COMPONENT24_ARB          0x81A6
+#define GL_DEPTH_COMPONENT32_ARB          0x81A7
+#define GL_TEXTURE_DEPTH_SIZE_ARB         0x884A
+#define GL_DEPTH_TEXTURE_MODE_ARB         0x884B
+#endif
+
+#ifndef GL_ARB_shadow
+#define GL_TEXTURE_COMPARE_MODE_ARB       0x884C
+#define GL_TEXTURE_COMPARE_FUNC_ARB       0x884D
+#define GL_COMPARE_R_TO_TEXTURE_ARB       0x884E
+#endif
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF
+#endif
+
+#ifndef GL_ARB_window_pos
+#endif
+
+#ifndef GL_ARB_vertex_program
+#define GL_COLOR_SUM_ARB                  0x8458
+#define GL_VERTEX_PROGRAM_ARB             0x8620
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB   0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB   0x8625
+#define GL_CURRENT_VERTEX_ATTRIB_ARB      0x8626
+#define GL_PROGRAM_LENGTH_ARB             0x8627
+#define GL_PROGRAM_STRING_ARB             0x8628
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
+#define GL_MAX_PROGRAM_MATRICES_ARB       0x862F
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
+#define GL_CURRENT_MATRIX_ARB             0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB  0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB    0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
+#define GL_PROGRAM_ERROR_POSITION_ARB     0x864B
+#define GL_PROGRAM_BINDING_ARB            0x8677
+#define GL_MAX_VERTEX_ATTRIBS_ARB         0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
+#define GL_PROGRAM_ERROR_STRING_ARB       0x8874
+#define GL_PROGRAM_FORMAT_ASCII_ARB       0x8875
+#define GL_PROGRAM_FORMAT_ARB             0x8876
+#define GL_PROGRAM_INSTRUCTIONS_ARB       0x88A0
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB   0x88A1
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
+#define GL_PROGRAM_TEMPORARIES_ARB        0x88A4
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB    0x88A5
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
+#define GL_PROGRAM_PARAMETERS_ARB         0x88A8
+#define GL_MAX_PROGRAM_PARAMETERS_ARB     0x88A9
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB  0x88AA
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
+#define GL_PROGRAM_ATTRIBS_ARB            0x88AC
+#define GL_MAX_PROGRAM_ATTRIBS_ARB        0x88AD
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB     0x88AE
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB  0x88B0
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB   0x88B7
+#define GL_MATRIX0_ARB                    0x88C0
+#define GL_MATRIX1_ARB                    0x88C1
+#define GL_MATRIX2_ARB                    0x88C2
+#define GL_MATRIX3_ARB                    0x88C3
+#define GL_MATRIX4_ARB                    0x88C4
+#define GL_MATRIX5_ARB                    0x88C5
+#define GL_MATRIX6_ARB                    0x88C6
+#define GL_MATRIX7_ARB                    0x88C7
+#define GL_MATRIX8_ARB                    0x88C8
+#define GL_MATRIX9_ARB                    0x88C9
+#define GL_MATRIX10_ARB                   0x88CA
+#define GL_MATRIX11_ARB                   0x88CB
+#define GL_MATRIX12_ARB                   0x88CC
+#define GL_MATRIX13_ARB                   0x88CD
+#define GL_MATRIX14_ARB                   0x88CE
+#define GL_MATRIX15_ARB                   0x88CF
+#define GL_MATRIX16_ARB                   0x88D0
+#define GL_MATRIX17_ARB                   0x88D1
+#define GL_MATRIX18_ARB                   0x88D2
+#define GL_MATRIX19_ARB                   0x88D3
+#define GL_MATRIX20_ARB                   0x88D4
+#define GL_MATRIX21_ARB                   0x88D5
+#define GL_MATRIX22_ARB                   0x88D6
+#define GL_MATRIX23_ARB                   0x88D7
+#define GL_MATRIX24_ARB                   0x88D8
+#define GL_MATRIX25_ARB                   0x88D9
+#define GL_MATRIX26_ARB                   0x88DA
+#define GL_MATRIX27_ARB                   0x88DB
+#define GL_MATRIX28_ARB                   0x88DC
+#define GL_MATRIX29_ARB                   0x88DD
+#define GL_MATRIX30_ARB                   0x88DE
+#define GL_MATRIX31_ARB                   0x88DF
+#endif
+
+#ifndef GL_ARB_fragment_program
+#define GL_FRAGMENT_PROGRAM_ARB           0x8804
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB   0x8805
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB   0x8806
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB   0x8807
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
+#define GL_MAX_TEXTURE_COORDS_ARB         0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB    0x8872
+#endif
+
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_BUFFER_SIZE_ARB                0x8764
+#define GL_BUFFER_USAGE_ARB               0x8765
+#define GL_ARRAY_BUFFER_ARB               0x8892
+#define GL_ELEMENT_ARRAY_BUFFER_ARB       0x8893
+#define GL_ARRAY_BUFFER_BINDING_ARB       0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
+#define GL_READ_ONLY_ARB                  0x88B8
+#define GL_WRITE_ONLY_ARB                 0x88B9
+#define GL_READ_WRITE_ARB                 0x88BA
+#define GL_BUFFER_ACCESS_ARB              0x88BB
+#define GL_BUFFER_MAPPED_ARB              0x88BC
+#define GL_BUFFER_MAP_POINTER_ARB         0x88BD
+#define GL_STREAM_DRAW_ARB                0x88E0
+#define GL_STREAM_READ_ARB                0x88E1
+#define GL_STREAM_COPY_ARB                0x88E2
+#define GL_STATIC_DRAW_ARB                0x88E4
+#define GL_STATIC_READ_ARB                0x88E5
+#define GL_STATIC_COPY_ARB                0x88E6
+#define GL_DYNAMIC_DRAW_ARB               0x88E8
+#define GL_DYNAMIC_READ_ARB               0x88E9
+#define GL_DYNAMIC_COPY_ARB               0x88EA
+#endif
+
+#ifndef GL_ARB_occlusion_query
+#define GL_QUERY_COUNTER_BITS_ARB         0x8864
+#define GL_CURRENT_QUERY_ARB              0x8865
+#define GL_QUERY_RESULT_ARB               0x8866
+#define GL_QUERY_RESULT_AVAILABLE_ARB     0x8867
+#define GL_SAMPLES_PASSED_ARB             0x8914
+#endif
+
+#ifndef GL_ARB_shader_objects
+#define GL_PROGRAM_OBJECT_ARB             0x8B40
+#define GL_SHADER_OBJECT_ARB              0x8B48
+#define GL_OBJECT_TYPE_ARB                0x8B4E
+#define GL_OBJECT_SUBTYPE_ARB             0x8B4F
+#define GL_FLOAT_VEC2_ARB                 0x8B50
+#define GL_FLOAT_VEC3_ARB                 0x8B51
+#define GL_FLOAT_VEC4_ARB                 0x8B52
+#define GL_INT_VEC2_ARB                   0x8B53
+#define GL_INT_VEC3_ARB                   0x8B54
+#define GL_INT_VEC4_ARB                   0x8B55
+#define GL_BOOL_ARB                       0x8B56
+#define GL_BOOL_VEC2_ARB                  0x8B57
+#define GL_BOOL_VEC3_ARB                  0x8B58
+#define GL_BOOL_VEC4_ARB                  0x8B59
+#define GL_FLOAT_MAT2_ARB                 0x8B5A
+#define GL_FLOAT_MAT3_ARB                 0x8B5B
+#define GL_FLOAT_MAT4_ARB                 0x8B5C
+#define GL_SAMPLER_1D_ARB                 0x8B5D
+#define GL_SAMPLER_2D_ARB                 0x8B5E
+#define GL_SAMPLER_3D_ARB                 0x8B5F
+#define GL_SAMPLER_CUBE_ARB               0x8B60
+#define GL_SAMPLER_1D_SHADOW_ARB          0x8B61
+#define GL_SAMPLER_2D_SHADOW_ARB          0x8B62
+#define GL_SAMPLER_2D_RECT_ARB            0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB     0x8B64
+#define GL_OBJECT_DELETE_STATUS_ARB       0x8B80
+#define GL_OBJECT_COMPILE_STATUS_ARB      0x8B81
+#define GL_OBJECT_LINK_STATUS_ARB         0x8B82
+#define GL_OBJECT_VALIDATE_STATUS_ARB     0x8B83
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB     0x8B84
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB    0x8B85
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB     0x8B86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88
+#endif
+
+#ifndef GL_ARB_vertex_shader
+#define GL_VERTEX_SHADER_ARB              0x8B31
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
+#define GL_MAX_VARYING_FLOATS_ARB         0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB   0x8B89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A
+#endif
+
+#ifndef GL_ARB_fragment_shader
+#define GL_FRAGMENT_SHADER_ARB            0x8B30
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B
+#endif
+
+#ifndef GL_ARB_shading_language_100
+#define GL_SHADING_LANGUAGE_VERSION_ARB   0x8B8C
+#endif
+
+#ifndef GL_ARB_texture_non_power_of_two
+#endif
+
+#ifndef GL_ARB_point_sprite
+#define GL_POINT_SPRITE_ARB               0x8861
+#define GL_COORD_REPLACE_ARB              0x8862
+#endif
+
+#ifndef GL_ARB_fragment_program_shadow
+#endif
+
+#ifndef GL_ARB_draw_buffers
+#define GL_MAX_DRAW_BUFFERS_ARB           0x8824
+#define GL_DRAW_BUFFER0_ARB               0x8825
+#define GL_DRAW_BUFFER1_ARB               0x8826
+#define GL_DRAW_BUFFER2_ARB               0x8827
+#define GL_DRAW_BUFFER3_ARB               0x8828
+#define GL_DRAW_BUFFER4_ARB               0x8829
+#define GL_DRAW_BUFFER5_ARB               0x882A
+#define GL_DRAW_BUFFER6_ARB               0x882B
+#define GL_DRAW_BUFFER7_ARB               0x882C
+#define GL_DRAW_BUFFER8_ARB               0x882D
+#define GL_DRAW_BUFFER9_ARB               0x882E
+#define GL_DRAW_BUFFER10_ARB              0x882F
+#define GL_DRAW_BUFFER11_ARB              0x8830
+#define GL_DRAW_BUFFER12_ARB              0x8831
+#define GL_DRAW_BUFFER13_ARB              0x8832
+#define GL_DRAW_BUFFER14_ARB              0x8833
+#define GL_DRAW_BUFFER15_ARB              0x8834
+#endif
+
+#ifndef GL_ARB_texture_rectangle
+#define GL_TEXTURE_RECTANGLE_ARB          0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB  0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB    0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8
+#endif
+
+#ifndef GL_ARB_color_buffer_float
+#define GL_RGBA_FLOAT_MODE_ARB            0x8820
+#define GL_CLAMP_VERTEX_COLOR_ARB         0x891A
+#define GL_CLAMP_FRAGMENT_COLOR_ARB       0x891B
+#define GL_CLAMP_READ_COLOR_ARB           0x891C
+#define GL_FIXED_ONLY_ARB                 0x891D
+#endif
+
+#ifndef GL_ARB_half_float_pixel
+#define GL_HALF_FLOAT_ARB                 0x140B
+#endif
+
+#ifndef GL_ARB_texture_float
+#define GL_TEXTURE_RED_TYPE_ARB           0x8C10
+#define GL_TEXTURE_GREEN_TYPE_ARB         0x8C11
+#define GL_TEXTURE_BLUE_TYPE_ARB          0x8C12
+#define GL_TEXTURE_ALPHA_TYPE_ARB         0x8C13
+#define GL_TEXTURE_LUMINANCE_TYPE_ARB     0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE_ARB     0x8C15
+#define GL_TEXTURE_DEPTH_TYPE_ARB         0x8C16
+#define GL_UNSIGNED_NORMALIZED_ARB        0x8C17
+#define GL_RGBA32F_ARB                    0x8814
+#define GL_RGB32F_ARB                     0x8815
+#define GL_ALPHA32F_ARB                   0x8816
+#define GL_INTENSITY32F_ARB               0x8817
+#define GL_LUMINANCE32F_ARB               0x8818
+#define GL_LUMINANCE_ALPHA32F_ARB         0x8819
+#define GL_RGBA16F_ARB                    0x881A
+#define GL_RGB16F_ARB                     0x881B
+#define GL_ALPHA16F_ARB                   0x881C
+#define GL_INTENSITY16F_ARB               0x881D
+#define GL_LUMINANCE16F_ARB               0x881E
+#define GL_LUMINANCE_ALPHA16F_ARB         0x881F
+#endif
+
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_PIXEL_PACK_BUFFER_ARB          0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_ARB        0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB  0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
+#endif
+
+#ifndef GL_ARB_depth_buffer_float
+#define GL_DEPTH_COMPONENT32F             0x8CAC
+#define GL_DEPTH32F_STENCIL8              0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+#endif
+
+#ifndef GL_ARB_draw_instanced
+#endif
+
+#ifndef GL_ARB_framebuffer_object
+#define GL_INVALID_FRAMEBUFFER_OPERATION  0x0506
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_DEFAULT            0x8218
+#define GL_FRAMEBUFFER_UNDEFINED          0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT       0x821A
+#define GL_INDEX                          0x8222
+#define GL_MAX_RENDERBUFFER_SIZE          0x84E8
+#define GL_DEPTH_STENCIL                  0x84F9
+#define GL_UNSIGNED_INT_24_8              0x84FA
+#define GL_DEPTH24_STENCIL8               0x88F0
+#define GL_TEXTURE_STENCIL_SIZE           0x88F1
+#define GL_FRAMEBUFFER_BINDING            0x8CA6
+#define GL_DRAW_FRAMEBUFFER_BINDING       GL_FRAMEBUFFER_BINDING
+#define GL_RENDERBUFFER_BINDING           0x8CA7
+#define GL_READ_FRAMEBUFFER               0x8CA8
+#define GL_DRAW_FRAMEBUFFER               0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING       0x8CAA
+#define GL_RENDERBUFFER_SAMPLES           0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE           0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED        0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS          0x8CDF
+#define GL_COLOR_ATTACHMENT0              0x8CE0
+#define GL_COLOR_ATTACHMENT1              0x8CE1
+#define GL_COLOR_ATTACHMENT2              0x8CE2
+#define GL_COLOR_ATTACHMENT3              0x8CE3
+#define GL_COLOR_ATTACHMENT4              0x8CE4
+#define GL_COLOR_ATTACHMENT5              0x8CE5
+#define GL_COLOR_ATTACHMENT6              0x8CE6
+#define GL_COLOR_ATTACHMENT7              0x8CE7
+#define GL_COLOR_ATTACHMENT8              0x8CE8
+#define GL_COLOR_ATTACHMENT9              0x8CE9
+#define GL_COLOR_ATTACHMENT10             0x8CEA
+#define GL_COLOR_ATTACHMENT11             0x8CEB
+#define GL_COLOR_ATTACHMENT12             0x8CEC
+#define GL_COLOR_ATTACHMENT13             0x8CED
+#define GL_COLOR_ATTACHMENT14             0x8CEE
+#define GL_COLOR_ATTACHMENT15             0x8CEF
+#define GL_DEPTH_ATTACHMENT               0x8D00
+#define GL_STENCIL_ATTACHMENT             0x8D20
+#define GL_FRAMEBUFFER                    0x8D40
+#define GL_RENDERBUFFER                   0x8D41
+#define GL_RENDERBUFFER_WIDTH             0x8D42
+#define GL_RENDERBUFFER_HEIGHT            0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT   0x8D44
+#define GL_STENCIL_INDEX1                 0x8D46
+#define GL_STENCIL_INDEX4                 0x8D47
+#define GL_STENCIL_INDEX8                 0x8D48
+#define GL_STENCIL_INDEX16                0x8D49
+#define GL_RENDERBUFFER_RED_SIZE          0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE        0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE         0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE        0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE        0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE      0x8D55
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_MAX_SAMPLES                    0x8D57
+#endif
+
+#ifndef GL_ARB_framebuffer_sRGB
+#define GL_FRAMEBUFFER_SRGB               0x8DB9
+#endif
+
+#ifndef GL_ARB_geometry_shader4
+#define GL_LINES_ADJACENCY_ARB            0x000A
+#define GL_LINE_STRIP_ADJACENCY_ARB       0x000B
+#define GL_TRIANGLES_ADJACENCY_ARB        0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB   0x000D
+#define GL_PROGRAM_POINT_SIZE_ARB         0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9
+#define GL_GEOMETRY_SHADER_ARB            0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT_ARB      0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_ARB        0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB       0x8DDC
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1
+#endif
+
+#ifndef GL_ARB_half_float_vertex
+#define GL_HALF_FLOAT                     0x140B
+#endif
+
+#ifndef GL_ARB_instanced_arrays
+#endif
+
+#ifndef GL_ARB_map_buffer_range
+#define GL_MAP_READ_BIT                   0x0001
+#define GL_MAP_WRITE_BIT                  0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT       0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT      0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT         0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT         0x0020
+#endif
+
+#ifndef GL_ARB_texture_buffer_object
+#define GL_TEXTURE_BUFFER_ARB             0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB    0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_ARB     0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_ARB      0x8C2E
+#endif
+
+#ifndef GL_ARB_texture_compression_rgtc
+#define GL_COMPRESSED_RED_RGTC1           0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1    0x8DBC
+#define GL_COMPRESSED_RG_RGTC2            0x8DBD
+#define GL_COMPRESSED_SIGNED_RG_RGTC2     0x8DBE
+#endif
+
+#ifndef GL_ARB_texture_rg
+#define GL_RG                             0x8227
+#define GL_RG_INTEGER                     0x8228
+#define GL_R8                             0x8229
+#define GL_R16                            0x822A
+#define GL_RG8                            0x822B
+#define GL_RG16                           0x822C
+#define GL_R16F                           0x822D
+#define GL_R32F                           0x822E
+#define GL_RG16F                          0x822F
+#define GL_RG32F                          0x8230
+#define GL_R8I                            0x8231
+#define GL_R8UI                           0x8232
+#define GL_R16I                           0x8233
+#define GL_R16UI                          0x8234
+#define GL_R32I                           0x8235
+#define GL_R32UI                          0x8236
+#define GL_RG8I                           0x8237
+#define GL_RG8UI                          0x8238
+#define GL_RG16I                          0x8239
+#define GL_RG16UI                         0x823A
+#define GL_RG32I                          0x823B
+#define GL_RG32UI                         0x823C
+#endif
+
+#ifndef GL_ARB_vertex_array_object
+#define GL_VERTEX_ARRAY_BINDING           0x85B5
+#endif
+
+#ifndef GL_EXT_abgr
+#define GL_ABGR_EXT                       0x8000
+#endif
+
+#ifndef GL_EXT_blend_color
+#define GL_CONSTANT_COLOR_EXT             0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR_EXT   0x8002
+#define GL_CONSTANT_ALPHA_EXT             0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT   0x8004
+#define GL_BLEND_COLOR_EXT                0x8005
+#endif
+
+#ifndef GL_EXT_polygon_offset
+#define GL_POLYGON_OFFSET_EXT             0x8037
+#define GL_POLYGON_OFFSET_FACTOR_EXT      0x8038
+#define GL_POLYGON_OFFSET_BIAS_EXT        0x8039
+#endif
+
+#ifndef GL_EXT_texture
+#define GL_ALPHA4_EXT                     0x803B
+#define GL_ALPHA8_EXT                     0x803C
+#define GL_ALPHA12_EXT                    0x803D
+#define GL_ALPHA16_EXT                    0x803E
+#define GL_LUMINANCE4_EXT                 0x803F
+#define GL_LUMINANCE8_EXT                 0x8040
+#define GL_LUMINANCE12_EXT                0x8041
+#define GL_LUMINANCE16_EXT                0x8042
+#define GL_LUMINANCE4_ALPHA4_EXT          0x8043
+#define GL_LUMINANCE6_ALPHA2_EXT          0x8044
+#define GL_LUMINANCE8_ALPHA8_EXT          0x8045
+#define GL_LUMINANCE12_ALPHA4_EXT         0x8046
+#define GL_LUMINANCE12_ALPHA12_EXT        0x8047
+#define GL_LUMINANCE16_ALPHA16_EXT        0x8048
+#define GL_INTENSITY_EXT                  0x8049
+#define GL_INTENSITY4_EXT                 0x804A
+#define GL_INTENSITY8_EXT                 0x804B
+#define GL_INTENSITY12_EXT                0x804C
+#define GL_INTENSITY16_EXT                0x804D
+#define GL_RGB2_EXT                       0x804E
+#define GL_RGB4_EXT                       0x804F
+#define GL_RGB5_EXT                       0x8050
+#define GL_RGB8_EXT                       0x8051
+#define GL_RGB10_EXT                      0x8052
+#define GL_RGB12_EXT                      0x8053
+#define GL_RGB16_EXT                      0x8054
+#define GL_RGBA2_EXT                      0x8055
+#define GL_RGBA4_EXT                      0x8056
+#define GL_RGB5_A1_EXT                    0x8057
+#define GL_RGBA8_EXT                      0x8058
+#define GL_RGB10_A2_EXT                   0x8059
+#define GL_RGBA12_EXT                     0x805A
+#define GL_RGBA16_EXT                     0x805B
+#define GL_TEXTURE_RED_SIZE_EXT           0x805C
+#define GL_TEXTURE_GREEN_SIZE_EXT         0x805D
+#define GL_TEXTURE_BLUE_SIZE_EXT          0x805E
+#define GL_TEXTURE_ALPHA_SIZE_EXT         0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE_EXT     0x8060
+#define GL_TEXTURE_INTENSITY_SIZE_EXT     0x8061
+#define GL_REPLACE_EXT                    0x8062
+#define GL_PROXY_TEXTURE_1D_EXT           0x8063
+#define GL_PROXY_TEXTURE_2D_EXT           0x8064
+#define GL_TEXTURE_TOO_LARGE_EXT          0x8065
+#endif
+
+#ifndef GL_EXT_texture3D
+#define GL_PACK_SKIP_IMAGES_EXT           0x806B
+#define GL_PACK_IMAGE_HEIGHT_EXT          0x806C
+#define GL_UNPACK_SKIP_IMAGES_EXT         0x806D
+#define GL_UNPACK_IMAGE_HEIGHT_EXT        0x806E
+#define GL_TEXTURE_3D_EXT                 0x806F
+#define GL_PROXY_TEXTURE_3D_EXT           0x8070
+#define GL_TEXTURE_DEPTH_EXT              0x8071
+#define GL_TEXTURE_WRAP_R_EXT             0x8072
+#define GL_MAX_3D_TEXTURE_SIZE_EXT        0x8073
+#endif
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_FILTER4_SGIS                   0x8146
+#define GL_TEXTURE_FILTER4_SIZE_SGIS      0x8147
+#endif
+
+#ifndef GL_EXT_subtexture
+#endif
+
+#ifndef GL_EXT_copy_texture
+#endif
+
+#ifndef GL_EXT_histogram
+#define GL_HISTOGRAM_EXT                  0x8024
+#define GL_PROXY_HISTOGRAM_EXT            0x8025
+#define GL_HISTOGRAM_WIDTH_EXT            0x8026
+#define GL_HISTOGRAM_FORMAT_EXT           0x8027
+#define GL_HISTOGRAM_RED_SIZE_EXT         0x8028
+#define GL_HISTOGRAM_GREEN_SIZE_EXT       0x8029
+#define GL_HISTOGRAM_BLUE_SIZE_EXT        0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE_EXT       0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT   0x802C
+#define GL_HISTOGRAM_SINK_EXT             0x802D
+#define GL_MINMAX_EXT                     0x802E
+#define GL_MINMAX_FORMAT_EXT              0x802F
+#define GL_MINMAX_SINK_EXT                0x8030
+#define GL_TABLE_TOO_LARGE_EXT            0x8031
+#endif
+
+#ifndef GL_EXT_convolution
+#define GL_CONVOLUTION_1D_EXT             0x8010
+#define GL_CONVOLUTION_2D_EXT             0x8011
+#define GL_SEPARABLE_2D_EXT               0x8012
+#define GL_CONVOLUTION_BORDER_MODE_EXT    0x8013
+#define GL_CONVOLUTION_FILTER_SCALE_EXT   0x8014
+#define GL_CONVOLUTION_FILTER_BIAS_EXT    0x8015
+#define GL_REDUCE_EXT                     0x8016
+#define GL_CONVOLUTION_FORMAT_EXT         0x8017
+#define GL_CONVOLUTION_WIDTH_EXT          0x8018
+#define GL_CONVOLUTION_HEIGHT_EXT         0x8019
+#define GL_MAX_CONVOLUTION_WIDTH_EXT      0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT_EXT     0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS_EXT  0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023
+#endif
+
+#ifndef GL_SGI_color_matrix
+#define GL_COLOR_MATRIX_SGI               0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH_SGI   0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB
+#endif
+
+#ifndef GL_SGI_color_table
+#define GL_COLOR_TABLE_SGI                0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2
+#define GL_PROXY_COLOR_TABLE_SGI          0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5
+#define GL_COLOR_TABLE_SCALE_SGI          0x80D6
+#define GL_COLOR_TABLE_BIAS_SGI           0x80D7
+#define GL_COLOR_TABLE_FORMAT_SGI         0x80D8
+#define GL_COLOR_TABLE_WIDTH_SGI          0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_SGI       0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_SGI     0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_SGI      0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_SGI     0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF
+#endif
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_PIXEL_TEXTURE_SGIS             0x8353
+#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354
+#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355
+#define GL_PIXEL_GROUP_COLOR_SGIS         0x8356
+#endif
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_PIXEL_TEX_GEN_SGIX             0x8139
+#define GL_PIXEL_TEX_GEN_MODE_SGIX        0x832B
+#endif
+
+#ifndef GL_SGIS_texture4D
+#define GL_PACK_SKIP_VOLUMES_SGIS         0x8130
+#define GL_PACK_IMAGE_DEPTH_SGIS          0x8131
+#define GL_UNPACK_SKIP_VOLUMES_SGIS       0x8132
+#define GL_UNPACK_IMAGE_DEPTH_SGIS        0x8133
+#define GL_TEXTURE_4D_SGIS                0x8134
+#define GL_PROXY_TEXTURE_4D_SGIS          0x8135
+#define GL_TEXTURE_4DSIZE_SGIS            0x8136
+#define GL_TEXTURE_WRAP_Q_SGIS            0x8137
+#define GL_MAX_4D_TEXTURE_SIZE_SGIS       0x8138
+#define GL_TEXTURE_4D_BINDING_SGIS        0x814F
+#endif
+
+#ifndef GL_SGI_texture_color_table
+#define GL_TEXTURE_COLOR_TABLE_SGI        0x80BC
+#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI  0x80BD
+#endif
+
+#ifndef GL_EXT_cmyka
+#define GL_CMYK_EXT                       0x800C
+#define GL_CMYKA_EXT                      0x800D
+#define GL_PACK_CMYK_HINT_EXT             0x800E
+#define GL_UNPACK_CMYK_HINT_EXT           0x800F
+#endif
+
+#ifndef GL_EXT_texture_object
+#define GL_TEXTURE_PRIORITY_EXT           0x8066
+#define GL_TEXTURE_RESIDENT_EXT           0x8067
+#define GL_TEXTURE_1D_BINDING_EXT         0x8068
+#define GL_TEXTURE_2D_BINDING_EXT         0x8069
+#define GL_TEXTURE_3D_BINDING_EXT         0x806A
+#endif
+
+#ifndef GL_SGIS_detail_texture
+#define GL_DETAIL_TEXTURE_2D_SGIS         0x8095
+#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096
+#define GL_LINEAR_DETAIL_SGIS             0x8097
+#define GL_LINEAR_DETAIL_ALPHA_SGIS       0x8098
+#define GL_LINEAR_DETAIL_COLOR_SGIS       0x8099
+#define GL_DETAIL_TEXTURE_LEVEL_SGIS      0x809A
+#define GL_DETAIL_TEXTURE_MODE_SGIS       0x809B
+#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C
+#endif
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_LINEAR_SHARPEN_SGIS            0x80AD
+#define GL_LINEAR_SHARPEN_ALPHA_SGIS      0x80AE
+#define GL_LINEAR_SHARPEN_COLOR_SGIS      0x80AF
+#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0
+#endif
+
+#ifndef GL_EXT_packed_pixels
+#define GL_UNSIGNED_BYTE_3_3_2_EXT        0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4_EXT     0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1_EXT     0x8034
+#define GL_UNSIGNED_INT_8_8_8_8_EXT       0x8035
+#define GL_UNSIGNED_INT_10_10_10_2_EXT    0x8036
+#endif
+
+#ifndef GL_SGIS_texture_lod
+#define GL_TEXTURE_MIN_LOD_SGIS           0x813A
+#define GL_TEXTURE_MAX_LOD_SGIS           0x813B
+#define GL_TEXTURE_BASE_LEVEL_SGIS        0x813C
+#define GL_TEXTURE_MAX_LEVEL_SGIS         0x813D
+#endif
+
+#ifndef GL_SGIS_multisample
+#define GL_MULTISAMPLE_SGIS               0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_SGIS      0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_SGIS       0x809F
+#define GL_SAMPLE_MASK_SGIS               0x80A0
+#define GL_1PASS_SGIS                     0x80A1
+#define GL_2PASS_0_SGIS                   0x80A2
+#define GL_2PASS_1_SGIS                   0x80A3
+#define GL_4PASS_0_SGIS                   0x80A4
+#define GL_4PASS_1_SGIS                   0x80A5
+#define GL_4PASS_2_SGIS                   0x80A6
+#define GL_4PASS_3_SGIS                   0x80A7
+#define GL_SAMPLE_BUFFERS_SGIS            0x80A8
+#define GL_SAMPLES_SGIS                   0x80A9
+#define GL_SAMPLE_MASK_VALUE_SGIS         0x80AA
+#define GL_SAMPLE_MASK_INVERT_SGIS        0x80AB
+#define GL_SAMPLE_PATTERN_SGIS            0x80AC
+#endif
+
+#ifndef GL_EXT_rescale_normal
+#define GL_RESCALE_NORMAL_EXT             0x803A
+#endif
+
+#ifndef GL_EXT_vertex_array
+#define GL_VERTEX_ARRAY_EXT               0x8074
+#define GL_NORMAL_ARRAY_EXT               0x8075
+#define GL_COLOR_ARRAY_EXT                0x8076
+#define GL_INDEX_ARRAY_EXT                0x8077
+#define GL_TEXTURE_COORD_ARRAY_EXT        0x8078
+#define GL_EDGE_FLAG_ARRAY_EXT            0x8079
+#define GL_VERTEX_ARRAY_SIZE_EXT          0x807A
+#define GL_VERTEX_ARRAY_TYPE_EXT          0x807B
+#define GL_VERTEX_ARRAY_STRIDE_EXT        0x807C
+#define GL_VERTEX_ARRAY_COUNT_EXT         0x807D
+#define GL_NORMAL_ARRAY_TYPE_EXT          0x807E
+#define GL_NORMAL_ARRAY_STRIDE_EXT        0x807F
+#define GL_NORMAL_ARRAY_COUNT_EXT         0x8080
+#define GL_COLOR_ARRAY_SIZE_EXT           0x8081
+#define GL_COLOR_ARRAY_TYPE_EXT           0x8082
+#define GL_COLOR_ARRAY_STRIDE_EXT         0x8083
+#define GL_COLOR_ARRAY_COUNT_EXT          0x8084
+#define GL_INDEX_ARRAY_TYPE_EXT           0x8085
+#define GL_INDEX_ARRAY_STRIDE_EXT         0x8086
+#define GL_INDEX_ARRAY_COUNT_EXT          0x8087
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT   0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT   0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT  0x808B
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT     0x808C
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT      0x808D
+#define GL_VERTEX_ARRAY_POINTER_EXT       0x808E
+#define GL_NORMAL_ARRAY_POINTER_EXT       0x808F
+#define GL_COLOR_ARRAY_POINTER_EXT        0x8090
+#define GL_INDEX_ARRAY_POINTER_EXT        0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT    0x8093
+#endif
+
+#ifndef GL_EXT_misc_attribute
+#endif
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_GENERATE_MIPMAP_SGIS           0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS      0x8192
+#endif
+
+#ifndef GL_SGIX_clipmap
+#define GL_LINEAR_CLIPMAP_LINEAR_SGIX     0x8170
+#define GL_TEXTURE_CLIPMAP_CENTER_SGIX    0x8171
+#define GL_TEXTURE_CLIPMAP_FRAME_SGIX     0x8172
+#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX    0x8173
+#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174
+#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175
+#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX     0x8176
+#define GL_MAX_CLIPMAP_DEPTH_SGIX         0x8177
+#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178
+#define GL_NEAREST_CLIPMAP_NEAREST_SGIX   0x844D
+#define GL_NEAREST_CLIPMAP_LINEAR_SGIX    0x844E
+#define GL_LINEAR_CLIPMAP_NEAREST_SGIX    0x844F
+#endif
+
+#ifndef GL_SGIX_shadow
+#define GL_TEXTURE_COMPARE_SGIX           0x819A
+#define GL_TEXTURE_COMPARE_OPERATOR_SGIX  0x819B
+#define GL_TEXTURE_LEQUAL_R_SGIX          0x819C
+#define GL_TEXTURE_GEQUAL_R_SGIX          0x819D
+#endif
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_CLAMP_TO_EDGE_SGIS             0x812F
+#endif
+
+#ifndef GL_SGIS_texture_border_clamp
+#define GL_CLAMP_TO_BORDER_SGIS           0x812D
+#endif
+
+#ifndef GL_EXT_blend_minmax
+#define GL_FUNC_ADD_EXT                   0x8006
+#define GL_MIN_EXT                        0x8007
+#define GL_MAX_EXT                        0x8008
+#define GL_BLEND_EQUATION_EXT             0x8009
+#endif
+
+#ifndef GL_EXT_blend_subtract
+#define GL_FUNC_SUBTRACT_EXT              0x800A
+#define GL_FUNC_REVERSE_SUBTRACT_EXT      0x800B
+#endif
+
+#ifndef GL_EXT_blend_logic_op
+#endif
+
+#ifndef GL_SGIX_interlace
+#define GL_INTERLACE_SGIX                 0x8094
+#endif
+
+#ifndef GL_SGIX_pixel_tiles
+#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E
+#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F
+#define GL_PIXEL_TILE_WIDTH_SGIX          0x8140
+#define GL_PIXEL_TILE_HEIGHT_SGIX         0x8141
+#define GL_PIXEL_TILE_GRID_WIDTH_SGIX     0x8142
+#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX    0x8143
+#define GL_PIXEL_TILE_GRID_DEPTH_SGIX     0x8144
+#define GL_PIXEL_TILE_CACHE_SIZE_SGIX     0x8145
+#endif
+
+#ifndef GL_SGIS_texture_select
+#define GL_DUAL_ALPHA4_SGIS               0x8110
+#define GL_DUAL_ALPHA8_SGIS               0x8111
+#define GL_DUAL_ALPHA12_SGIS              0x8112
+#define GL_DUAL_ALPHA16_SGIS              0x8113
+#define GL_DUAL_LUMINANCE4_SGIS           0x8114
+#define GL_DUAL_LUMINANCE8_SGIS           0x8115
+#define GL_DUAL_LUMINANCE12_SGIS          0x8116
+#define GL_DUAL_LUMINANCE16_SGIS          0x8117
+#define GL_DUAL_INTENSITY4_SGIS           0x8118
+#define GL_DUAL_INTENSITY8_SGIS           0x8119
+#define GL_DUAL_INTENSITY12_SGIS          0x811A
+#define GL_DUAL_INTENSITY16_SGIS          0x811B
+#define GL_DUAL_LUMINANCE_ALPHA4_SGIS     0x811C
+#define GL_DUAL_LUMINANCE_ALPHA8_SGIS     0x811D
+#define GL_QUAD_ALPHA4_SGIS               0x811E
+#define GL_QUAD_ALPHA8_SGIS               0x811F
+#define GL_QUAD_LUMINANCE4_SGIS           0x8120
+#define GL_QUAD_LUMINANCE8_SGIS           0x8121
+#define GL_QUAD_INTENSITY4_SGIS           0x8122
+#define GL_QUAD_INTENSITY8_SGIS           0x8123
+#define GL_DUAL_TEXTURE_SELECT_SGIS       0x8124
+#define GL_QUAD_TEXTURE_SELECT_SGIS       0x8125
+#endif
+
+#ifndef GL_SGIX_sprite
+#define GL_SPRITE_SGIX                    0x8148
+#define GL_SPRITE_MODE_SGIX               0x8149
+#define GL_SPRITE_AXIS_SGIX               0x814A
+#define GL_SPRITE_TRANSLATION_SGIX        0x814B
+#define GL_SPRITE_AXIAL_SGIX              0x814C
+#define GL_SPRITE_OBJECT_ALIGNED_SGIX     0x814D
+#define GL_SPRITE_EYE_ALIGNED_SGIX        0x814E
+#endif
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E
+#endif
+
+#ifndef GL_EXT_point_parameters
+#define GL_POINT_SIZE_MIN_EXT             0x8126
+#define GL_POINT_SIZE_MAX_EXT             0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT  0x8128
+#define GL_DISTANCE_ATTENUATION_EXT       0x8129
+#endif
+
+#ifndef GL_SGIS_point_parameters
+#define GL_POINT_SIZE_MIN_SGIS            0x8126
+#define GL_POINT_SIZE_MAX_SGIS            0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128
+#define GL_DISTANCE_ATTENUATION_SGIS      0x8129
+#endif
+
+#ifndef GL_SGIX_instruments
+#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180
+#define GL_INSTRUMENT_MEASUREMENTS_SGIX   0x8181
+#endif
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_POST_TEXTURE_FILTER_BIAS_SGIX  0x8179
+#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A
+#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B
+#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C
+#endif
+
+#ifndef GL_SGIX_framezoom
+#define GL_FRAMEZOOM_SGIX                 0x818B
+#define GL_FRAMEZOOM_FACTOR_SGIX          0x818C
+#define GL_MAX_FRAMEZOOM_FACTOR_SGIX      0x818D
+#endif
+
+#ifndef GL_SGIX_tag_sample_buffer
+#endif
+
+#ifndef GL_FfdMaskSGIX
+#define GL_TEXTURE_DEFORMATION_BIT_SGIX   0x00000001
+#define GL_GEOMETRY_DEFORMATION_BIT_SGIX  0x00000002
+#endif
+
+#ifndef GL_SGIX_polynomial_ffd
+#define GL_GEOMETRY_DEFORMATION_SGIX      0x8194
+#define GL_TEXTURE_DEFORMATION_SGIX       0x8195
+#define GL_DEFORMATIONS_MASK_SGIX         0x8196
+#define GL_MAX_DEFORMATION_ORDER_SGIX     0x8197
+#endif
+
+#ifndef GL_SGIX_reference_plane
+#define GL_REFERENCE_PLANE_SGIX           0x817D
+#define GL_REFERENCE_PLANE_EQUATION_SGIX  0x817E
+#endif
+
+#ifndef GL_SGIX_flush_raster
+#endif
+
+#ifndef GL_SGIX_depth_texture
+#define GL_DEPTH_COMPONENT16_SGIX         0x81A5
+#define GL_DEPTH_COMPONENT24_SGIX         0x81A6
+#define GL_DEPTH_COMPONENT32_SGIX         0x81A7
+#endif
+
+#ifndef GL_SGIS_fog_function
+#define GL_FOG_FUNC_SGIS                  0x812A
+#define GL_FOG_FUNC_POINTS_SGIS           0x812B
+#define GL_MAX_FOG_FUNC_POINTS_SGIS       0x812C
+#endif
+
+#ifndef GL_SGIX_fog_offset
+#define GL_FOG_OFFSET_SGIX                0x8198
+#define GL_FOG_OFFSET_VALUE_SGIX          0x8199
+#endif
+
+#ifndef GL_HP_image_transform
+#define GL_IMAGE_SCALE_X_HP               0x8155
+#define GL_IMAGE_SCALE_Y_HP               0x8156
+#define GL_IMAGE_TRANSLATE_X_HP           0x8157
+#define GL_IMAGE_TRANSLATE_Y_HP           0x8158
+#define GL_IMAGE_ROTATE_ANGLE_HP          0x8159
+#define GL_IMAGE_ROTATE_ORIGIN_X_HP       0x815A
+#define GL_IMAGE_ROTATE_ORIGIN_Y_HP       0x815B
+#define GL_IMAGE_MAG_FILTER_HP            0x815C
+#define GL_IMAGE_MIN_FILTER_HP            0x815D
+#define GL_IMAGE_CUBIC_WEIGHT_HP          0x815E
+#define GL_CUBIC_HP                       0x815F
+#define GL_AVERAGE_HP                     0x8160
+#define GL_IMAGE_TRANSFORM_2D_HP          0x8161
+#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162
+#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163
+#endif
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_IGNORE_BORDER_HP               0x8150
+#define GL_CONSTANT_BORDER_HP             0x8151
+#define GL_REPLICATE_BORDER_HP            0x8153
+#define GL_CONVOLUTION_BORDER_COLOR_HP    0x8154
+#endif
+
+#ifndef GL_INGR_palette_buffer
+#endif
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_TEXTURE_ENV_BIAS_SGIX          0x80BE
+#endif
+
+#ifndef GL_EXT_color_subtable
+#endif
+
+#ifndef GL_PGI_vertex_hints
+#define GL_VERTEX_DATA_HINT_PGI           0x1A22A
+#define GL_VERTEX_CONSISTENT_HINT_PGI     0x1A22B
+#define GL_MATERIAL_SIDE_HINT_PGI         0x1A22C
+#define GL_MAX_VERTEX_HINT_PGI            0x1A22D
+#define GL_COLOR3_BIT_PGI                 0x00010000
+#define GL_COLOR4_BIT_PGI                 0x00020000
+#define GL_EDGEFLAG_BIT_PGI               0x00040000
+#define GL_INDEX_BIT_PGI                  0x00080000
+#define GL_MAT_AMBIENT_BIT_PGI            0x00100000
+#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
+#define GL_MAT_DIFFUSE_BIT_PGI            0x00400000
+#define GL_MAT_EMISSION_BIT_PGI           0x00800000
+#define GL_MAT_COLOR_INDEXES_BIT_PGI      0x01000000
+#define GL_MAT_SHININESS_BIT_PGI          0x02000000
+#define GL_MAT_SPECULAR_BIT_PGI           0x04000000
+#define GL_NORMAL_BIT_PGI                 0x08000000
+#define GL_TEXCOORD1_BIT_PGI              0x10000000
+#define GL_TEXCOORD2_BIT_PGI              0x20000000
+#define GL_TEXCOORD3_BIT_PGI              0x40000000
+#define GL_TEXCOORD4_BIT_PGI              0x80000000
+#define GL_VERTEX23_BIT_PGI               0x00000004
+#define GL_VERTEX4_BIT_PGI                0x00000008
+#endif
+
+#ifndef GL_PGI_misc_hints
+#define GL_PREFER_DOUBLEBUFFER_HINT_PGI   0x1A1F8
+#define GL_CONSERVE_MEMORY_HINT_PGI       0x1A1FD
+#define GL_RECLAIM_MEMORY_HINT_PGI        0x1A1FE
+#define GL_NATIVE_GRAPHICS_HANDLE_PGI     0x1A202
+#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203
+#define GL_NATIVE_GRAPHICS_END_HINT_PGI   0x1A204
+#define GL_ALWAYS_FAST_HINT_PGI           0x1A20C
+#define GL_ALWAYS_SOFT_HINT_PGI           0x1A20D
+#define GL_ALLOW_DRAW_OBJ_HINT_PGI        0x1A20E
+#define GL_ALLOW_DRAW_WIN_HINT_PGI        0x1A20F
+#define GL_ALLOW_DRAW_FRG_HINT_PGI        0x1A210
+#define GL_ALLOW_DRAW_MEM_HINT_PGI        0x1A211
+#define GL_STRICT_DEPTHFUNC_HINT_PGI      0x1A216
+#define GL_STRICT_LIGHTING_HINT_PGI       0x1A217
+#define GL_STRICT_SCISSOR_HINT_PGI        0x1A218
+#define GL_FULL_STIPPLE_HINT_PGI          0x1A219
+#define GL_CLIP_NEAR_HINT_PGI             0x1A220
+#define GL_CLIP_FAR_HINT_PGI              0x1A221
+#define GL_WIDE_LINE_HINT_PGI             0x1A222
+#define GL_BACK_NORMALS_HINT_PGI          0x1A223
+#endif
+
+#ifndef GL_EXT_paletted_texture
+#define GL_COLOR_INDEX1_EXT               0x80E2
+#define GL_COLOR_INDEX2_EXT               0x80E3
+#define GL_COLOR_INDEX4_EXT               0x80E4
+#define GL_COLOR_INDEX8_EXT               0x80E5
+#define GL_COLOR_INDEX12_EXT              0x80E6
+#define GL_COLOR_INDEX16_EXT              0x80E7
+#define GL_TEXTURE_INDEX_SIZE_EXT         0x80ED
+#endif
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT  0x80F0
+#endif
+
+#ifndef GL_SGIX_list_priority
+#define GL_LIST_PRIORITY_SGIX             0x8182
+#endif
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_IR_INSTRUMENT1_SGIX            0x817F
+#endif
+
+#ifndef GL_SGIX_calligraphic_fragment
+#define GL_CALLIGRAPHIC_FRAGMENT_SGIX     0x8183
+#endif
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_TEXTURE_LOD_BIAS_S_SGIX        0x818E
+#define GL_TEXTURE_LOD_BIAS_T_SGIX        0x818F
+#define GL_TEXTURE_LOD_BIAS_R_SGIX        0x8190
+#endif
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SHADOW_AMBIENT_SGIX            0x80BF
+#endif
+
+#ifndef GL_EXT_index_texture
+#endif
+
+#ifndef GL_EXT_index_material
+#define GL_INDEX_MATERIAL_EXT             0x81B8
+#define GL_INDEX_MATERIAL_PARAMETER_EXT   0x81B9
+#define GL_INDEX_MATERIAL_FACE_EXT        0x81BA
+#endif
+
+#ifndef GL_EXT_index_func
+#define GL_INDEX_TEST_EXT                 0x81B5
+#define GL_INDEX_TEST_FUNC_EXT            0x81B6
+#define GL_INDEX_TEST_REF_EXT             0x81B7
+#endif
+
+#ifndef GL_EXT_index_array_formats
+#define GL_IUI_V2F_EXT                    0x81AD
+#define GL_IUI_V3F_EXT                    0x81AE
+#define GL_IUI_N3F_V2F_EXT                0x81AF
+#define GL_IUI_N3F_V3F_EXT                0x81B0
+#define GL_T2F_IUI_V2F_EXT                0x81B1
+#define GL_T2F_IUI_V3F_EXT                0x81B2
+#define GL_T2F_IUI_N3F_V2F_EXT            0x81B3
+#define GL_T2F_IUI_N3F_V3F_EXT            0x81B4
+#endif
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT   0x81A8
+#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT   0x81A9
+#endif
+
+#ifndef GL_EXT_cull_vertex
+#define GL_CULL_VERTEX_EXT                0x81AA
+#define GL_CULL_VERTEX_EYE_POSITION_EXT   0x81AB
+#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC
+#endif
+
+#ifndef GL_SGIX_ycrcb
+#define GL_YCRCB_422_SGIX                 0x81BB
+#define GL_YCRCB_444_SGIX                 0x81BC
+#endif
+
+#ifndef GL_SGIX_fragment_lighting
+#define GL_FRAGMENT_LIGHTING_SGIX         0x8400
+#define GL_FRAGMENT_COLOR_MATERIAL_SGIX   0x8401
+#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402
+#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403
+#define GL_MAX_FRAGMENT_LIGHTS_SGIX       0x8404
+#define GL_MAX_ACTIVE_LIGHTS_SGIX         0x8405
+#define GL_CURRENT_RASTER_NORMAL_SGIX     0x8406
+#define GL_LIGHT_ENV_MODE_SGIX            0x8407
+#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408
+#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409
+#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A
+#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B
+#define GL_FRAGMENT_LIGHT0_SGIX           0x840C
+#define GL_FRAGMENT_LIGHT1_SGIX           0x840D
+#define GL_FRAGMENT_LIGHT2_SGIX           0x840E
+#define GL_FRAGMENT_LIGHT3_SGIX           0x840F
+#define GL_FRAGMENT_LIGHT4_SGIX           0x8410
+#define GL_FRAGMENT_LIGHT5_SGIX           0x8411
+#define GL_FRAGMENT_LIGHT6_SGIX           0x8412
+#define GL_FRAGMENT_LIGHT7_SGIX           0x8413
+#endif
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_RASTER_POSITION_UNCLIPPED_IBM  0x19262
+#endif
+
+#ifndef GL_HP_texture_lighting
+#define GL_TEXTURE_LIGHTING_MODE_HP       0x8167
+#define GL_TEXTURE_POST_SPECULAR_HP       0x8168
+#define GL_TEXTURE_PRE_SPECULAR_HP        0x8169
+#endif
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_MAX_ELEMENTS_VERTICES_EXT      0x80E8
+#define GL_MAX_ELEMENTS_INDICES_EXT       0x80E9
+#endif
+
+#ifndef GL_WIN_phong_shading
+#define GL_PHONG_WIN                      0x80EA
+#define GL_PHONG_HINT_WIN                 0x80EB
+#endif
+
+#ifndef GL_WIN_specular_fog
+#define GL_FOG_SPECULAR_TEXTURE_WIN       0x80EC
+#endif
+
+#ifndef GL_EXT_light_texture
+#define GL_FRAGMENT_MATERIAL_EXT          0x8349
+#define GL_FRAGMENT_NORMAL_EXT            0x834A
+#define GL_FRAGMENT_COLOR_EXT             0x834C
+#define GL_ATTENUATION_EXT                0x834D
+#define GL_SHADOW_ATTENUATION_EXT         0x834E
+#define GL_TEXTURE_APPLICATION_MODE_EXT   0x834F
+#define GL_TEXTURE_LIGHT_EXT              0x8350
+#define GL_TEXTURE_MATERIAL_FACE_EXT      0x8351
+#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352
+/* reuse GL_FRAGMENT_DEPTH_EXT */
+#endif
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_ALPHA_MIN_SGIX                 0x8320
+#define GL_ALPHA_MAX_SGIX                 0x8321
+#endif
+
+#ifndef GL_SGIX_impact_pixel_texture
+#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX   0x8184
+#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX     0x8185
+#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX     0x8186
+#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187
+#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188
+#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX    0x8189
+#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX    0x818A
+#endif
+
+#ifndef GL_EXT_bgra
+#define GL_BGR_EXT                        0x80E0
+#define GL_BGRA_EXT                       0x80E1
+#endif
+
+#ifndef GL_SGIX_async
+#define GL_ASYNC_MARKER_SGIX              0x8329
+#endif
+
+#ifndef GL_SGIX_async_pixel
+#define GL_ASYNC_TEX_IMAGE_SGIX           0x835C
+#define GL_ASYNC_DRAW_PIXELS_SGIX         0x835D
+#define GL_ASYNC_READ_PIXELS_SGIX         0x835E
+#define GL_MAX_ASYNC_TEX_IMAGE_SGIX       0x835F
+#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX     0x8360
+#define GL_MAX_ASYNC_READ_PIXELS_SGIX     0x8361
+#endif
+
+#ifndef GL_SGIX_async_histogram
+#define GL_ASYNC_HISTOGRAM_SGIX           0x832C
+#define GL_MAX_ASYNC_HISTOGRAM_SGIX       0x832D
+#endif
+
+#ifndef GL_INTEL_texture_scissor
+#endif
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_PARALLEL_ARRAYS_INTEL          0x83F4
+#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5
+#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6
+#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7
+#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8
+#endif
+
+#ifndef GL_HP_occlusion_test
+#define GL_OCCLUSION_TEST_HP              0x8165
+#define GL_OCCLUSION_TEST_RESULT_HP       0x8166
+#endif
+
+#ifndef GL_EXT_pixel_transform
+#define GL_PIXEL_TRANSFORM_2D_EXT         0x8330
+#define GL_PIXEL_MAG_FILTER_EXT           0x8331
+#define GL_PIXEL_MIN_FILTER_EXT           0x8332
+#define GL_PIXEL_CUBIC_WEIGHT_EXT         0x8333
+#define GL_CUBIC_EXT                      0x8334
+#define GL_AVERAGE_EXT                    0x8335
+#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336
+#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337
+#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT  0x8338
+#endif
+
+#ifndef GL_EXT_pixel_transform_color_table
+#endif
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_SHARED_TEXTURE_PALETTE_EXT     0x81FB
+#endif
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT  0x81F8
+#define GL_SINGLE_COLOR_EXT               0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR_EXT    0x81FA
+#endif
+
+#ifndef GL_EXT_secondary_color
+#define GL_COLOR_SUM_EXT                  0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT    0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
+#define GL_SECONDARY_COLOR_ARRAY_EXT      0x845E
+#endif
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_PERTURB_EXT                    0x85AE
+#define GL_TEXTURE_NORMAL_EXT             0x85AF
+#endif
+
+#ifndef GL_EXT_multi_draw_arrays
+#endif
+
+#ifndef GL_EXT_fog_coord
+#define GL_FOG_COORDINATE_SOURCE_EXT      0x8450
+#define GL_FOG_COORDINATE_EXT             0x8451
+#define GL_FRAGMENT_DEPTH_EXT             0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT     0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT  0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT       0x8457
+#endif
+
+#ifndef GL_REND_screen_coordinates
+#define GL_SCREEN_COORDINATES_REND        0x8490
+#define GL_INVERTED_SCREEN_W_REND         0x8491
+#endif
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_TANGENT_ARRAY_EXT              0x8439
+#define GL_BINORMAL_ARRAY_EXT             0x843A
+#define GL_CURRENT_TANGENT_EXT            0x843B
+#define GL_CURRENT_BINORMAL_EXT           0x843C
+#define GL_TANGENT_ARRAY_TYPE_EXT         0x843E
+#define GL_TANGENT_ARRAY_STRIDE_EXT       0x843F
+#define GL_BINORMAL_ARRAY_TYPE_EXT        0x8440
+#define GL_BINORMAL_ARRAY_STRIDE_EXT      0x8441
+#define GL_TANGENT_ARRAY_POINTER_EXT      0x8442
+#define GL_BINORMAL_ARRAY_POINTER_EXT     0x8443
+#define GL_MAP1_TANGENT_EXT               0x8444
+#define GL_MAP2_TANGENT_EXT               0x8445
+#define GL_MAP1_BINORMAL_EXT              0x8446
+#define GL_MAP2_BINORMAL_EXT              0x8447
+#endif
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_COMBINE_EXT                    0x8570
+#define GL_COMBINE_RGB_EXT                0x8571
+#define GL_COMBINE_ALPHA_EXT              0x8572
+#define GL_RGB_SCALE_EXT                  0x8573
+#define GL_ADD_SIGNED_EXT                 0x8574
+#define GL_INTERPOLATE_EXT                0x8575
+#define GL_CONSTANT_EXT                   0x8576
+#define GL_PRIMARY_COLOR_EXT              0x8577
+#define GL_PREVIOUS_EXT                   0x8578
+#define GL_SOURCE0_RGB_EXT                0x8580
+#define GL_SOURCE1_RGB_EXT                0x8581
+#define GL_SOURCE2_RGB_EXT                0x8582
+#define GL_SOURCE0_ALPHA_EXT              0x8588
+#define GL_SOURCE1_ALPHA_EXT              0x8589
+#define GL_SOURCE2_ALPHA_EXT              0x858A
+#define GL_OPERAND0_RGB_EXT               0x8590
+#define GL_OPERAND1_RGB_EXT               0x8591
+#define GL_OPERAND2_RGB_EXT               0x8592
+#define GL_OPERAND0_ALPHA_EXT             0x8598
+#define GL_OPERAND1_ALPHA_EXT             0x8599
+#define GL_OPERAND2_ALPHA_EXT             0x859A
+#endif
+
+#ifndef GL_APPLE_specular_vector
+#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0
+#endif
+
+#ifndef GL_APPLE_transform_hint
+#define GL_TRANSFORM_HINT_APPLE           0x85B1
+#endif
+
+#ifndef GL_SGIX_fog_scale
+#define GL_FOG_SCALE_SGIX                 0x81FC
+#define GL_FOG_SCALE_VALUE_SGIX           0x81FD
+#endif
+
+#ifndef GL_SUNX_constant_data
+#define GL_UNPACK_CONSTANT_DATA_SUNX      0x81D5
+#define GL_TEXTURE_CONSTANT_DATA_SUNX     0x81D6
+#endif
+
+#ifndef GL_SUN_global_alpha
+#define GL_GLOBAL_ALPHA_SUN               0x81D9
+#define GL_GLOBAL_ALPHA_FACTOR_SUN        0x81DA
+#endif
+
+#ifndef GL_SUN_triangle_list
+#define GL_RESTART_SUN                    0x0001
+#define GL_REPLACE_MIDDLE_SUN             0x0002
+#define GL_REPLACE_OLDEST_SUN             0x0003
+#define GL_TRIANGLE_LIST_SUN              0x81D7
+#define GL_REPLACEMENT_CODE_SUN           0x81D8
+#define GL_REPLACEMENT_CODE_ARRAY_SUN     0x85C0
+#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1
+#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2
+#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3
+#define GL_R1UI_V3F_SUN                   0x85C4
+#define GL_R1UI_C4UB_V3F_SUN              0x85C5
+#define GL_R1UI_C3F_V3F_SUN               0x85C6
+#define GL_R1UI_N3F_V3F_SUN               0x85C7
+#define GL_R1UI_C4F_N3F_V3F_SUN           0x85C8
+#define GL_R1UI_T2F_V3F_SUN               0x85C9
+#define GL_R1UI_T2F_N3F_V3F_SUN           0x85CA
+#define GL_R1UI_T2F_C4F_N3F_V3F_SUN       0x85CB
+#endif
+
+#ifndef GL_SUN_vertex
+#endif
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_BLEND_DST_RGB_EXT              0x80C8
+#define GL_BLEND_SRC_RGB_EXT              0x80C9
+#define GL_BLEND_DST_ALPHA_EXT            0x80CA
+#define GL_BLEND_SRC_ALPHA_EXT            0x80CB
+#endif
+
+#ifndef GL_INGR_color_clamp
+#define GL_RED_MIN_CLAMP_INGR             0x8560
+#define GL_GREEN_MIN_CLAMP_INGR           0x8561
+#define GL_BLUE_MIN_CLAMP_INGR            0x8562
+#define GL_ALPHA_MIN_CLAMP_INGR           0x8563
+#define GL_RED_MAX_CLAMP_INGR             0x8564
+#define GL_GREEN_MAX_CLAMP_INGR           0x8565
+#define GL_BLUE_MAX_CLAMP_INGR            0x8566
+#define GL_ALPHA_MAX_CLAMP_INGR           0x8567
+#endif
+
+#ifndef GL_INGR_interlace_read
+#define GL_INTERLACE_READ_INGR            0x8568
+#endif
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_INCR_WRAP_EXT                  0x8507
+#define GL_DECR_WRAP_EXT                  0x8508
+#endif
+
+#ifndef GL_EXT_422_pixels
+#define GL_422_EXT                        0x80CC
+#define GL_422_REV_EXT                    0x80CD
+#define GL_422_AVERAGE_EXT                0x80CE
+#define GL_422_REV_AVERAGE_EXT            0x80CF
+#endif
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NORMAL_MAP_NV                  0x8511
+#define GL_REFLECTION_MAP_NV              0x8512
+#endif
+
+#ifndef GL_EXT_texture_cube_map
+#define GL_NORMAL_MAP_EXT                 0x8511
+#define GL_REFLECTION_MAP_EXT             0x8512
+#define GL_TEXTURE_CUBE_MAP_EXT           0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_EXT   0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_EXT     0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT  0x851C
+#endif
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_WRAP_BORDER_SUN                0x81D4
+#endif
+
+#ifndef GL_EXT_texture_env_add
+#endif
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT       0x84FD
+#define GL_TEXTURE_FILTER_CONTROL_EXT     0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT           0x8501
+#endif
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT     0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+#endif
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_MODELVIEW0_STACK_DEPTH_EXT     GL_MODELVIEW_STACK_DEPTH
+#define GL_MODELVIEW1_STACK_DEPTH_EXT     0x8502
+#define GL_MODELVIEW0_MATRIX_EXT          GL_MODELVIEW_MATRIX
+#define GL_MODELVIEW1_MATRIX_EXT          0x8506
+#define GL_VERTEX_WEIGHTING_EXT           0x8509
+#define GL_MODELVIEW0_EXT                 GL_MODELVIEW
+#define GL_MODELVIEW1_EXT                 0x850A
+#define GL_CURRENT_VERTEX_WEIGHT_EXT      0x850B
+#define GL_VERTEX_WEIGHT_ARRAY_EXT        0x850C
+#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT   0x850D
+#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT   0x850E
+#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F
+#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510
+#endif
+
+#ifndef GL_NV_light_max_exponent
+#define GL_MAX_SHININESS_NV               0x8504
+#define GL_MAX_SPOT_EXPONENT_NV           0x8505
+#endif
+
+#ifndef GL_NV_vertex_array_range
+#define GL_VERTEX_ARRAY_RANGE_NV          0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV   0x851E
+#define GL_VERTEX_ARRAY_RANGE_VALID_NV    0x851F
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
+#define GL_VERTEX_ARRAY_RANGE_POINTER_NV  0x8521
+#endif
+
+#ifndef GL_NV_register_combiners
+#define GL_REGISTER_COMBINERS_NV          0x8522
+#define GL_VARIABLE_A_NV                  0x8523
+#define GL_VARIABLE_B_NV                  0x8524
+#define GL_VARIABLE_C_NV                  0x8525
+#define GL_VARIABLE_D_NV                  0x8526
+#define GL_VARIABLE_E_NV                  0x8527
+#define GL_VARIABLE_F_NV                  0x8528
+#define GL_VARIABLE_G_NV                  0x8529
+#define GL_CONSTANT_COLOR0_NV             0x852A
+#define GL_CONSTANT_COLOR1_NV             0x852B
+#define GL_PRIMARY_COLOR_NV               0x852C
+#define GL_SECONDARY_COLOR_NV             0x852D
+#define GL_SPARE0_NV                      0x852E
+#define GL_SPARE1_NV                      0x852F
+#define GL_DISCARD_NV                     0x8530
+#define GL_E_TIMES_F_NV                   0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_UNSIGNED_IDENTITY_NV           0x8536
+#define GL_UNSIGNED_INVERT_NV             0x8537
+#define GL_EXPAND_NORMAL_NV               0x8538
+#define GL_EXPAND_NEGATE_NV               0x8539
+#define GL_HALF_BIAS_NORMAL_NV            0x853A
+#define GL_HALF_BIAS_NEGATE_NV            0x853B
+#define GL_SIGNED_IDENTITY_NV             0x853C
+#define GL_SIGNED_NEGATE_NV               0x853D
+#define GL_SCALE_BY_TWO_NV                0x853E
+#define GL_SCALE_BY_FOUR_NV               0x853F
+#define GL_SCALE_BY_ONE_HALF_NV           0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV   0x8541
+#define GL_COMBINER_INPUT_NV              0x8542
+#define GL_COMBINER_MAPPING_NV            0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV    0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV     0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV     0x8546
+#define GL_COMBINER_MUX_SUM_NV            0x8547
+#define GL_COMBINER_SCALE_NV              0x8548
+#define GL_COMBINER_BIAS_NV               0x8549
+#define GL_COMBINER_AB_OUTPUT_NV          0x854A
+#define GL_COMBINER_CD_OUTPUT_NV          0x854B
+#define GL_COMBINER_SUM_OUTPUT_NV         0x854C
+#define GL_MAX_GENERAL_COMBINERS_NV       0x854D
+#define GL_NUM_GENERAL_COMBINERS_NV       0x854E
+#define GL_COLOR_SUM_CLAMP_NV             0x854F
+#define GL_COMBINER0_NV                   0x8550
+#define GL_COMBINER1_NV                   0x8551
+#define GL_COMBINER2_NV                   0x8552
+#define GL_COMBINER3_NV                   0x8553
+#define GL_COMBINER4_NV                   0x8554
+#define GL_COMBINER5_NV                   0x8555
+#define GL_COMBINER6_NV                   0x8556
+#define GL_COMBINER7_NV                   0x8557
+/* reuse GL_TEXTURE0_ARB */
+/* reuse GL_TEXTURE1_ARB */
+/* reuse GL_ZERO */
+/* reuse GL_NONE */
+/* reuse GL_FOG */
+#endif
+
+#ifndef GL_NV_fog_distance
+#define GL_FOG_DISTANCE_MODE_NV           0x855A
+#define GL_EYE_RADIAL_NV                  0x855B
+#define GL_EYE_PLANE_ABSOLUTE_NV          0x855C
+/* reuse GL_EYE_PLANE */
+#endif
+
+#ifndef GL_NV_texgen_emboss
+#define GL_EMBOSS_LIGHT_NV                0x855D
+#define GL_EMBOSS_CONSTANT_NV             0x855E
+#define GL_EMBOSS_MAP_NV                  0x855F
+#endif
+
+#ifndef GL_NV_blend_square
+#endif
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_COMBINE4_NV                    0x8503
+#define GL_SOURCE3_RGB_NV                 0x8583
+#define GL_SOURCE3_ALPHA_NV               0x858B
+#define GL_OPERAND3_RGB_NV                0x8593
+#define GL_OPERAND3_ALPHA_NV              0x859B
+#endif
+
+#ifndef GL_MESA_resize_buffers
+#endif
+
+#ifndef GL_MESA_window_pos
+#endif
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT   0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT  0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT  0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT  0x83F3
+#endif
+
+#ifndef GL_IBM_cull_vertex
+#define GL_CULL_VERTEX_IBM                103050
+#endif
+
+#ifndef GL_IBM_multimode_draw_arrays
+#endif
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_VERTEX_ARRAY_LIST_IBM          103070
+#define GL_NORMAL_ARRAY_LIST_IBM          103071
+#define GL_COLOR_ARRAY_LIST_IBM           103072
+#define GL_INDEX_ARRAY_LIST_IBM           103073
+#define GL_TEXTURE_COORD_ARRAY_LIST_IBM   103074
+#define GL_EDGE_FLAG_ARRAY_LIST_IBM       103075
+#define GL_FOG_COORDINATE_ARRAY_LIST_IBM  103076
+#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077
+#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM   103080
+#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM   103081
+#define GL_COLOR_ARRAY_LIST_STRIDE_IBM    103082
+#define GL_INDEX_ARRAY_LIST_STRIDE_IBM    103083
+#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084
+#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085
+#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086
+#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087
+#endif
+
+#ifndef GL_SGIX_subsample
+#define GL_PACK_SUBSAMPLE_RATE_SGIX       0x85A0
+#define GL_UNPACK_SUBSAMPLE_RATE_SGIX     0x85A1
+#define GL_PIXEL_SUBSAMPLE_4444_SGIX      0x85A2
+#define GL_PIXEL_SUBSAMPLE_2424_SGIX      0x85A3
+#define GL_PIXEL_SUBSAMPLE_4242_SGIX      0x85A4
+#endif
+
+#ifndef GL_SGIX_ycrcb_subsample
+#endif
+
+#ifndef GL_SGIX_ycrcba
+#define GL_YCRCB_SGIX                     0x8318
+#define GL_YCRCBA_SGIX                    0x8319
+#endif
+
+#ifndef GL_SGI_depth_pass_instrument
+#define GL_DEPTH_PASS_INSTRUMENT_SGIX     0x8310
+#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311
+#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312
+#endif
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_COMPRESSED_RGB_FXT1_3DFX       0x86B0
+#define GL_COMPRESSED_RGBA_FXT1_3DFX      0x86B1
+#endif
+
+#ifndef GL_3DFX_multisample
+#define GL_MULTISAMPLE_3DFX               0x86B2
+#define GL_SAMPLE_BUFFERS_3DFX            0x86B3
+#define GL_SAMPLES_3DFX                   0x86B4
+#define GL_MULTISAMPLE_BIT_3DFX           0x20000000
+#endif
+
+#ifndef GL_3DFX_tbuffer
+#endif
+
+#ifndef GL_EXT_multisample
+#define GL_MULTISAMPLE_EXT                0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_EXT       0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT        0x809F
+#define GL_SAMPLE_MASK_EXT                0x80A0
+#define GL_1PASS_EXT                      0x80A1
+#define GL_2PASS_0_EXT                    0x80A2
+#define GL_2PASS_1_EXT                    0x80A3
+#define GL_4PASS_0_EXT                    0x80A4
+#define GL_4PASS_1_EXT                    0x80A5
+#define GL_4PASS_2_EXT                    0x80A6
+#define GL_4PASS_3_EXT                    0x80A7
+#define GL_SAMPLE_BUFFERS_EXT             0x80A8
+#define GL_SAMPLES_EXT                    0x80A9
+#define GL_SAMPLE_MASK_VALUE_EXT          0x80AA
+#define GL_SAMPLE_MASK_INVERT_EXT         0x80AB
+#define GL_SAMPLE_PATTERN_EXT             0x80AC
+#define GL_MULTISAMPLE_BIT_EXT            0x20000000
+#endif
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_VERTEX_PRECLIP_SGIX            0x83EE
+#define GL_VERTEX_PRECLIP_HINT_SGIX       0x83EF
+#endif
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_CONVOLUTION_HINT_SGIX          0x8316
+#endif
+
+#ifndef GL_SGIX_resample
+#define GL_PACK_RESAMPLE_SGIX             0x842C
+#define GL_UNPACK_RESAMPLE_SGIX           0x842D
+#define GL_RESAMPLE_REPLICATE_SGIX        0x842E
+#define GL_RESAMPLE_ZERO_FILL_SGIX        0x842F
+#define GL_RESAMPLE_DECIMATE_SGIX         0x8430
+#endif
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_EYE_DISTANCE_TO_POINT_SGIS     0x81F0
+#define GL_OBJECT_DISTANCE_TO_POINT_SGIS  0x81F1
+#define GL_EYE_DISTANCE_TO_LINE_SGIS      0x81F2
+#define GL_OBJECT_DISTANCE_TO_LINE_SGIS   0x81F3
+#define GL_EYE_POINT_SGIS                 0x81F4
+#define GL_OBJECT_POINT_SGIS              0x81F5
+#define GL_EYE_LINE_SGIS                  0x81F6
+#define GL_OBJECT_LINE_SGIS               0x81F7
+#endif
+
+#ifndef GL_SGIS_texture_color_mask
+#define GL_TEXTURE_COLOR_WRITEMASK_SGIS   0x81EF
+#endif
+
+#ifndef GL_EXT_texture_env_dot3
+#define GL_DOT3_RGB_EXT                   0x8740
+#define GL_DOT3_RGBA_EXT                  0x8741
+#endif
+
+#ifndef GL_ATI_texture_mirror_once
+#define GL_MIRROR_CLAMP_ATI               0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI       0x8743
+#endif
+
+#ifndef GL_NV_fence
+#define GL_ALL_COMPLETED_NV               0x84F2
+#define GL_FENCE_STATUS_NV                0x84F3
+#define GL_FENCE_CONDITION_NV             0x84F4
+#endif
+
+#ifndef GL_IBM_texture_mirrored_repeat
+#define GL_MIRRORED_REPEAT_IBM            0x8370
+#endif
+
+#ifndef GL_NV_evaluators
+#define GL_EVAL_2D_NV                     0x86C0
+#define GL_EVAL_TRIANGULAR_2D_NV          0x86C1
+#define GL_MAP_TESSELLATION_NV            0x86C2
+#define GL_MAP_ATTRIB_U_ORDER_NV          0x86C3
+#define GL_MAP_ATTRIB_V_ORDER_NV          0x86C4
+#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5
+#define GL_EVAL_VERTEX_ATTRIB0_NV         0x86C6
+#define GL_EVAL_VERTEX_ATTRIB1_NV         0x86C7
+#define GL_EVAL_VERTEX_ATTRIB2_NV         0x86C8
+#define GL_EVAL_VERTEX_ATTRIB3_NV         0x86C9
+#define GL_EVAL_VERTEX_ATTRIB4_NV         0x86CA
+#define GL_EVAL_VERTEX_ATTRIB5_NV         0x86CB
+#define GL_EVAL_VERTEX_ATTRIB6_NV         0x86CC
+#define GL_EVAL_VERTEX_ATTRIB7_NV         0x86CD
+#define GL_EVAL_VERTEX_ATTRIB8_NV         0x86CE
+#define GL_EVAL_VERTEX_ATTRIB9_NV         0x86CF
+#define GL_EVAL_VERTEX_ATTRIB10_NV        0x86D0
+#define GL_EVAL_VERTEX_ATTRIB11_NV        0x86D1
+#define GL_EVAL_VERTEX_ATTRIB12_NV        0x86D2
+#define GL_EVAL_VERTEX_ATTRIB13_NV        0x86D3
+#define GL_EVAL_VERTEX_ATTRIB14_NV        0x86D4
+#define GL_EVAL_VERTEX_ATTRIB15_NV        0x86D5
+#define GL_MAX_MAP_TESSELLATION_NV        0x86D6
+#define GL_MAX_RATIONAL_EVAL_ORDER_NV     0x86D7
+#endif
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_DEPTH_STENCIL_NV               0x84F9
+#define GL_UNSIGNED_INT_24_8_NV           0x84FA
+#endif
+
+#ifndef GL_NV_register_combiners2
+#define GL_PER_STAGE_CONSTANTS_NV         0x8535
+#endif
+
+#ifndef GL_NV_texture_compression_vtc
+#endif
+
+#ifndef GL_NV_texture_rectangle
+#define GL_TEXTURE_RECTANGLE_NV           0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_NV   0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_NV     0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV  0x84F8
+#endif
+
+#ifndef GL_NV_texture_shader
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV    0x864C
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV      0x86DA
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV  0x86DB
+#define GL_DSDT_MAG_INTENSITY_NV          0x86DC
+#define GL_SHADER_CONSISTENT_NV           0x86DD
+#define GL_TEXTURE_SHADER_NV              0x86DE
+#define GL_SHADER_OPERATION_NV            0x86DF
+#define GL_CULL_MODES_NV                  0x86E0
+#define GL_OFFSET_TEXTURE_MATRIX_NV       0x86E1
+#define GL_OFFSET_TEXTURE_SCALE_NV        0x86E2
+#define GL_OFFSET_TEXTURE_BIAS_NV         0x86E3
+#define GL_OFFSET_TEXTURE_2D_MATRIX_NV    GL_OFFSET_TEXTURE_MATRIX_NV
+#define GL_OFFSET_TEXTURE_2D_SCALE_NV     GL_OFFSET_TEXTURE_SCALE_NV
+#define GL_OFFSET_TEXTURE_2D_BIAS_NV      GL_OFFSET_TEXTURE_BIAS_NV
+#define GL_PREVIOUS_TEXTURE_INPUT_NV      0x86E4
+#define GL_CONST_EYE_NV                   0x86E5
+#define GL_PASS_THROUGH_NV                0x86E6
+#define GL_CULL_FRAGMENT_NV               0x86E7
+#define GL_OFFSET_TEXTURE_2D_NV           0x86E8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV     0x86E9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV     0x86EA
+#define GL_DOT_PRODUCT_NV                 0x86EC
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV   0x86ED
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV      0x86EE
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
+#define GL_HILO_NV                        0x86F4
+#define GL_DSDT_NV                        0x86F5
+#define GL_DSDT_MAG_NV                    0x86F6
+#define GL_DSDT_MAG_VIB_NV                0x86F7
+#define GL_HILO16_NV                      0x86F8
+#define GL_SIGNED_HILO_NV                 0x86F9
+#define GL_SIGNED_HILO16_NV               0x86FA
+#define GL_SIGNED_RGBA_NV                 0x86FB
+#define GL_SIGNED_RGBA8_NV                0x86FC
+#define GL_SIGNED_RGB_NV                  0x86FE
+#define GL_SIGNED_RGB8_NV                 0x86FF
+#define GL_SIGNED_LUMINANCE_NV            0x8701
+#define GL_SIGNED_LUMINANCE8_NV           0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV      0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV    0x8704
+#define GL_SIGNED_ALPHA_NV                0x8705
+#define GL_SIGNED_ALPHA8_NV               0x8706
+#define GL_SIGNED_INTENSITY_NV            0x8707
+#define GL_SIGNED_INTENSITY8_NV           0x8708
+#define GL_DSDT8_NV                       0x8709
+#define GL_DSDT8_MAG8_NV                  0x870A
+#define GL_DSDT8_MAG8_INTENSITY8_NV       0x870B
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV   0x870C
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+#define GL_HI_SCALE_NV                    0x870E
+#define GL_LO_SCALE_NV                    0x870F
+#define GL_DS_SCALE_NV                    0x8710
+#define GL_DT_SCALE_NV                    0x8711
+#define GL_MAGNITUDE_SCALE_NV             0x8712
+#define GL_VIBRANCE_SCALE_NV              0x8713
+#define GL_HI_BIAS_NV                     0x8714
+#define GL_LO_BIAS_NV                     0x8715
+#define GL_DS_BIAS_NV                     0x8716
+#define GL_DT_BIAS_NV                     0x8717
+#define GL_MAGNITUDE_BIAS_NV              0x8718
+#define GL_VIBRANCE_BIAS_NV               0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV       0x871A
+#define GL_TEXTURE_HI_SIZE_NV             0x871B
+#define GL_TEXTURE_LO_SIZE_NV             0x871C
+#define GL_TEXTURE_DS_SIZE_NV             0x871D
+#define GL_TEXTURE_DT_SIZE_NV             0x871E
+#define GL_TEXTURE_MAG_SIZE_NV            0x871F
+#endif
+
+#ifndef GL_NV_texture_shader2
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV      0x86EF
+#endif
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533
+#endif
+
+#ifndef GL_NV_vertex_program
+#define GL_VERTEX_PROGRAM_NV              0x8620
+#define GL_VERTEX_STATE_PROGRAM_NV        0x8621
+#define GL_ATTRIB_ARRAY_SIZE_NV           0x8623
+#define GL_ATTRIB_ARRAY_STRIDE_NV         0x8624
+#define GL_ATTRIB_ARRAY_TYPE_NV           0x8625
+#define GL_CURRENT_ATTRIB_NV              0x8626
+#define GL_PROGRAM_LENGTH_NV              0x8627
+#define GL_PROGRAM_STRING_NV              0x8628
+#define GL_MODELVIEW_PROJECTION_NV        0x8629
+#define GL_IDENTITY_NV                    0x862A
+#define GL_INVERSE_NV                     0x862B
+#define GL_TRANSPOSE_NV                   0x862C
+#define GL_INVERSE_TRANSPOSE_NV           0x862D
+#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
+#define GL_MAX_TRACK_MATRICES_NV          0x862F
+#define GL_MATRIX0_NV                     0x8630
+#define GL_MATRIX1_NV                     0x8631
+#define GL_MATRIX2_NV                     0x8632
+#define GL_MATRIX3_NV                     0x8633
+#define GL_MATRIX4_NV                     0x8634
+#define GL_MATRIX5_NV                     0x8635
+#define GL_MATRIX6_NV                     0x8636
+#define GL_MATRIX7_NV                     0x8637
+#define GL_CURRENT_MATRIX_STACK_DEPTH_NV  0x8640
+#define GL_CURRENT_MATRIX_NV              0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_NV   0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_NV     0x8643
+#define GL_PROGRAM_PARAMETER_NV           0x8644
+#define GL_ATTRIB_ARRAY_POINTER_NV        0x8645
+#define GL_PROGRAM_TARGET_NV              0x8646
+#define GL_PROGRAM_RESIDENT_NV            0x8647
+#define GL_TRACK_MATRIX_NV                0x8648
+#define GL_TRACK_MATRIX_TRANSFORM_NV      0x8649
+#define GL_VERTEX_PROGRAM_BINDING_NV      0x864A
+#define GL_PROGRAM_ERROR_POSITION_NV      0x864B
+#define GL_VERTEX_ATTRIB_ARRAY0_NV        0x8650
+#define GL_VERTEX_ATTRIB_ARRAY1_NV        0x8651
+#define GL_VERTEX_ATTRIB_ARRAY2_NV        0x8652
+#define GL_VERTEX_ATTRIB_ARRAY3_NV        0x8653
+#define GL_VERTEX_ATTRIB_ARRAY4_NV        0x8654
+#define GL_VERTEX_ATTRIB_ARRAY5_NV        0x8655
+#define GL_VERTEX_ATTRIB_ARRAY6_NV        0x8656
+#define GL_VERTEX_ATTRIB_ARRAY7_NV        0x8657
+#define GL_VERTEX_ATTRIB_ARRAY8_NV        0x8658
+#define GL_VERTEX_ATTRIB_ARRAY9_NV        0x8659
+#define GL_VERTEX_ATTRIB_ARRAY10_NV       0x865A
+#define GL_VERTEX_ATTRIB_ARRAY11_NV       0x865B
+#define GL_VERTEX_ATTRIB_ARRAY12_NV       0x865C
+#define GL_VERTEX_ATTRIB_ARRAY13_NV       0x865D
+#define GL_VERTEX_ATTRIB_ARRAY14_NV       0x865E
+#define GL_VERTEX_ATTRIB_ARRAY15_NV       0x865F
+#define GL_MAP1_VERTEX_ATTRIB0_4_NV       0x8660
+#define GL_MAP1_VERTEX_ATTRIB1_4_NV       0x8661
+#define GL_MAP1_VERTEX_ATTRIB2_4_NV       0x8662
+#define GL_MAP1_VERTEX_ATTRIB3_4_NV       0x8663
+#define GL_MAP1_VERTEX_ATTRIB4_4_NV       0x8664
+#define GL_MAP1_VERTEX_ATTRIB5_4_NV       0x8665
+#define GL_MAP1_VERTEX_ATTRIB6_4_NV       0x8666
+#define GL_MAP1_VERTEX_ATTRIB7_4_NV       0x8667
+#define GL_MAP1_VERTEX_ATTRIB8_4_NV       0x8668
+#define GL_MAP1_VERTEX_ATTRIB9_4_NV       0x8669
+#define GL_MAP1_VERTEX_ATTRIB10_4_NV      0x866A
+#define GL_MAP1_VERTEX_ATTRIB11_4_NV      0x866B
+#define GL_MAP1_VERTEX_ATTRIB12_4_NV      0x866C
+#define GL_MAP1_VERTEX_ATTRIB13_4_NV      0x866D
+#define GL_MAP1_VERTEX_ATTRIB14_4_NV      0x866E
+#define GL_MAP1_VERTEX_ATTRIB15_4_NV      0x866F
+#define GL_MAP2_VERTEX_ATTRIB0_4_NV       0x8670
+#define GL_MAP2_VERTEX_ATTRIB1_4_NV       0x8671
+#define GL_MAP2_VERTEX_ATTRIB2_4_NV       0x8672
+#define GL_MAP2_VERTEX_ATTRIB3_4_NV       0x8673
+#define GL_MAP2_VERTEX_ATTRIB4_4_NV       0x8674
+#define GL_MAP2_VERTEX_ATTRIB5_4_NV       0x8675
+#define GL_MAP2_VERTEX_ATTRIB6_4_NV       0x8676
+#define GL_MAP2_VERTEX_ATTRIB7_4_NV       0x8677
+#define GL_MAP2_VERTEX_ATTRIB8_4_NV       0x8678
+#define GL_MAP2_VERTEX_ATTRIB9_4_NV       0x8679
+#define GL_MAP2_VERTEX_ATTRIB10_4_NV      0x867A
+#define GL_MAP2_VERTEX_ATTRIB11_4_NV      0x867B
+#define GL_MAP2_VERTEX_ATTRIB12_4_NV      0x867C
+#define GL_MAP2_VERTEX_ATTRIB13_4_NV      0x867D
+#define GL_MAP2_VERTEX_ATTRIB14_4_NV      0x867E
+#define GL_MAP2_VERTEX_ATTRIB15_4_NV      0x867F
+#endif
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_TEXTURE_MAX_CLAMP_S_SGIX       0x8369
+#define GL_TEXTURE_MAX_CLAMP_T_SGIX       0x836A
+#define GL_TEXTURE_MAX_CLAMP_R_SGIX       0x836B
+#endif
+
+#ifndef GL_SGIX_scalebias_hint
+#define GL_SCALEBIAS_HINT_SGIX            0x8322
+#endif
+
+#ifndef GL_OML_interlace
+#define GL_INTERLACE_OML                  0x8980
+#define GL_INTERLACE_READ_OML             0x8981
+#endif
+
+#ifndef GL_OML_subsample
+#define GL_FORMAT_SUBSAMPLE_24_24_OML     0x8982
+#define GL_FORMAT_SUBSAMPLE_244_244_OML   0x8983
+#endif
+
+#ifndef GL_OML_resample
+#define GL_PACK_RESAMPLE_OML              0x8984
+#define GL_UNPACK_RESAMPLE_OML            0x8985
+#define GL_RESAMPLE_REPLICATE_OML         0x8986
+#define GL_RESAMPLE_ZERO_FILL_OML         0x8987
+#define GL_RESAMPLE_AVERAGE_OML           0x8988
+#define GL_RESAMPLE_DECIMATE_OML          0x8989
+#endif
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_DEPTH_STENCIL_TO_RGBA_NV       0x886E
+#define GL_DEPTH_STENCIL_TO_BGRA_NV       0x886F
+#endif
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_BUMP_ROT_MATRIX_ATI            0x8775
+#define GL_BUMP_ROT_MATRIX_SIZE_ATI       0x8776
+#define GL_BUMP_NUM_TEX_UNITS_ATI         0x8777
+#define GL_BUMP_TEX_UNITS_ATI             0x8778
+#define GL_DUDV_ATI                       0x8779
+#define GL_DU8DV8_ATI                     0x877A
+#define GL_BUMP_ENVMAP_ATI                0x877B
+#define GL_BUMP_TARGET_ATI                0x877C
+#endif
+
+#ifndef GL_ATI_fragment_shader
+#define GL_FRAGMENT_SHADER_ATI            0x8920
+#define GL_REG_0_ATI                      0x8921
+#define GL_REG_1_ATI                      0x8922
+#define GL_REG_2_ATI                      0x8923
+#define GL_REG_3_ATI                      0x8924
+#define GL_REG_4_ATI                      0x8925
+#define GL_REG_5_ATI                      0x8926
+#define GL_REG_6_ATI                      0x8927
+#define GL_REG_7_ATI                      0x8928
+#define GL_REG_8_ATI                      0x8929
+#define GL_REG_9_ATI                      0x892A
+#define GL_REG_10_ATI                     0x892B
+#define GL_REG_11_ATI                     0x892C
+#define GL_REG_12_ATI                     0x892D
+#define GL_REG_13_ATI                     0x892E
+#define GL_REG_14_ATI                     0x892F
+#define GL_REG_15_ATI                     0x8930
+#define GL_REG_16_ATI                     0x8931
+#define GL_REG_17_ATI                     0x8932
+#define GL_REG_18_ATI                     0x8933
+#define GL_REG_19_ATI                     0x8934
+#define GL_REG_20_ATI                     0x8935
+#define GL_REG_21_ATI                     0x8936
+#define GL_REG_22_ATI                     0x8937
+#define GL_REG_23_ATI                     0x8938
+#define GL_REG_24_ATI                     0x8939
+#define GL_REG_25_ATI                     0x893A
+#define GL_REG_26_ATI                     0x893B
+#define GL_REG_27_ATI                     0x893C
+#define GL_REG_28_ATI                     0x893D
+#define GL_REG_29_ATI                     0x893E
+#define GL_REG_30_ATI                     0x893F
+#define GL_REG_31_ATI                     0x8940
+#define GL_CON_0_ATI                      0x8941
+#define GL_CON_1_ATI                      0x8942
+#define GL_CON_2_ATI                      0x8943
+#define GL_CON_3_ATI                      0x8944
+#define GL_CON_4_ATI                      0x8945
+#define GL_CON_5_ATI                      0x8946
+#define GL_CON_6_ATI                      0x8947
+#define GL_CON_7_ATI                      0x8948
+#define GL_CON_8_ATI                      0x8949
+#define GL_CON_9_ATI                      0x894A
+#define GL_CON_10_ATI                     0x894B
+#define GL_CON_11_ATI                     0x894C
+#define GL_CON_12_ATI                     0x894D
+#define GL_CON_13_ATI                     0x894E
+#define GL_CON_14_ATI                     0x894F
+#define GL_CON_15_ATI                     0x8950
+#define GL_CON_16_ATI                     0x8951
+#define GL_CON_17_ATI                     0x8952
+#define GL_CON_18_ATI                     0x8953
+#define GL_CON_19_ATI                     0x8954
+#define GL_CON_20_ATI                     0x8955
+#define GL_CON_21_ATI                     0x8956
+#define GL_CON_22_ATI                     0x8957
+#define GL_CON_23_ATI                     0x8958
+#define GL_CON_24_ATI                     0x8959
+#define GL_CON_25_ATI                     0x895A
+#define GL_CON_26_ATI                     0x895B
+#define GL_CON_27_ATI                     0x895C
+#define GL_CON_28_ATI                     0x895D
+#define GL_CON_29_ATI                     0x895E
+#define GL_CON_30_ATI                     0x895F
+#define GL_CON_31_ATI                     0x8960
+#define GL_MOV_ATI                        0x8961
+#define GL_ADD_ATI                        0x8963
+#define GL_MUL_ATI                        0x8964
+#define GL_SUB_ATI                        0x8965
+#define GL_DOT3_ATI                       0x8966
+#define GL_DOT4_ATI                       0x8967
+#define GL_MAD_ATI                        0x8968
+#define GL_LERP_ATI                       0x8969
+#define GL_CND_ATI                        0x896A
+#define GL_CND0_ATI                       0x896B
+#define GL_DOT2_ADD_ATI                   0x896C
+#define GL_SECONDARY_INTERPOLATOR_ATI     0x896D
+#define GL_NUM_FRAGMENT_REGISTERS_ATI     0x896E
+#define GL_NUM_FRAGMENT_CONSTANTS_ATI     0x896F
+#define GL_NUM_PASSES_ATI                 0x8970
+#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI  0x8971
+#define GL_NUM_INSTRUCTIONS_TOTAL_ATI     0x8972
+#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973
+#define GL_NUM_LOOPBACK_COMPONENTS_ATI    0x8974
+#define GL_COLOR_ALPHA_PAIRING_ATI        0x8975
+#define GL_SWIZZLE_STR_ATI                0x8976
+#define GL_SWIZZLE_STQ_ATI                0x8977
+#define GL_SWIZZLE_STR_DR_ATI             0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI             0x8979
+#define GL_SWIZZLE_STRQ_ATI               0x897A
+#define GL_SWIZZLE_STRQ_DQ_ATI            0x897B
+#define GL_RED_BIT_ATI                    0x00000001
+#define GL_GREEN_BIT_ATI                  0x00000002
+#define GL_BLUE_BIT_ATI                   0x00000004
+#define GL_2X_BIT_ATI                     0x00000001
+#define GL_4X_BIT_ATI                     0x00000002
+#define GL_8X_BIT_ATI                     0x00000004
+#define GL_HALF_BIT_ATI                   0x00000008
+#define GL_QUARTER_BIT_ATI                0x00000010
+#define GL_EIGHTH_BIT_ATI                 0x00000020
+#define GL_SATURATE_BIT_ATI               0x00000040
+#define GL_COMP_BIT_ATI                   0x00000002
+#define GL_NEGATE_BIT_ATI                 0x00000004
+#define GL_BIAS_BIT_ATI                   0x00000008
+#endif
+
+#ifndef GL_ATI_pn_triangles
+#define GL_PN_TRIANGLES_ATI               0x87F0
+#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1
+#define GL_PN_TRIANGLES_POINT_MODE_ATI    0x87F2
+#define GL_PN_TRIANGLES_NORMAL_MODE_ATI   0x87F3
+#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4
+#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
+#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6
+#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
+#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8
+#endif
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_STATIC_ATI                     0x8760
+#define GL_DYNAMIC_ATI                    0x8761
+#define GL_PRESERVE_ATI                   0x8762
+#define GL_DISCARD_ATI                    0x8763
+#define GL_OBJECT_BUFFER_SIZE_ATI         0x8764
+#define GL_OBJECT_BUFFER_USAGE_ATI        0x8765
+#define GL_ARRAY_OBJECT_BUFFER_ATI        0x8766
+#define GL_ARRAY_OBJECT_OFFSET_ATI        0x8767
+#endif
+
+#ifndef GL_EXT_vertex_shader
+#define GL_VERTEX_SHADER_EXT              0x8780
+#define GL_VERTEX_SHADER_BINDING_EXT      0x8781
+#define GL_OP_INDEX_EXT                   0x8782
+#define GL_OP_NEGATE_EXT                  0x8783
+#define GL_OP_DOT3_EXT                    0x8784
+#define GL_OP_DOT4_EXT                    0x8785
+#define GL_OP_MUL_EXT                     0x8786
+#define GL_OP_ADD_EXT                     0x8787
+#define GL_OP_MADD_EXT                    0x8788
+#define GL_OP_FRAC_EXT                    0x8789
+#define GL_OP_MAX_EXT                     0x878A
+#define GL_OP_MIN_EXT                     0x878B
+#define GL_OP_SET_GE_EXT                  0x878C
+#define GL_OP_SET_LT_EXT                  0x878D
+#define GL_OP_CLAMP_EXT                   0x878E
+#define GL_OP_FLOOR_EXT                   0x878F
+#define GL_OP_ROUND_EXT                   0x8790
+#define GL_OP_EXP_BASE_2_EXT              0x8791
+#define GL_OP_LOG_BASE_2_EXT              0x8792
+#define GL_OP_POWER_EXT                   0x8793
+#define GL_OP_RECIP_EXT                   0x8794
+#define GL_OP_RECIP_SQRT_EXT              0x8795
+#define GL_OP_SUB_EXT                     0x8796
+#define GL_OP_CROSS_PRODUCT_EXT           0x8797
+#define GL_OP_MULTIPLY_MATRIX_EXT         0x8798
+#define GL_OP_MOV_EXT                     0x8799
+#define GL_OUTPUT_VERTEX_EXT              0x879A
+#define GL_OUTPUT_COLOR0_EXT              0x879B
+#define GL_OUTPUT_COLOR1_EXT              0x879C
+#define GL_OUTPUT_TEXTURE_COORD0_EXT      0x879D
+#define GL_OUTPUT_TEXTURE_COORD1_EXT      0x879E
+#define GL_OUTPUT_TEXTURE_COORD2_EXT      0x879F
+#define GL_OUTPUT_TEXTURE_COORD3_EXT      0x87A0
+#define GL_OUTPUT_TEXTURE_COORD4_EXT      0x87A1
+#define GL_OUTPUT_TEXTURE_COORD5_EXT      0x87A2
+#define GL_OUTPUT_TEXTURE_COORD6_EXT      0x87A3
+#define GL_OUTPUT_TEXTURE_COORD7_EXT      0x87A4
+#define GL_OUTPUT_TEXTURE_COORD8_EXT      0x87A5
+#define GL_OUTPUT_TEXTURE_COORD9_EXT      0x87A6
+#define GL_OUTPUT_TEXTURE_COORD10_EXT     0x87A7
+#define GL_OUTPUT_TEXTURE_COORD11_EXT     0x87A8
+#define GL_OUTPUT_TEXTURE_COORD12_EXT     0x87A9
+#define GL_OUTPUT_TEXTURE_COORD13_EXT     0x87AA
+#define GL_OUTPUT_TEXTURE_COORD14_EXT     0x87AB
+#define GL_OUTPUT_TEXTURE_COORD15_EXT     0x87AC
+#define GL_OUTPUT_TEXTURE_COORD16_EXT     0x87AD
+#define GL_OUTPUT_TEXTURE_COORD17_EXT     0x87AE
+#define GL_OUTPUT_TEXTURE_COORD18_EXT     0x87AF
+#define GL_OUTPUT_TEXTURE_COORD19_EXT     0x87B0
+#define GL_OUTPUT_TEXTURE_COORD20_EXT     0x87B1
+#define GL_OUTPUT_TEXTURE_COORD21_EXT     0x87B2
+#define GL_OUTPUT_TEXTURE_COORD22_EXT     0x87B3
+#define GL_OUTPUT_TEXTURE_COORD23_EXT     0x87B4
+#define GL_OUTPUT_TEXTURE_COORD24_EXT     0x87B5
+#define GL_OUTPUT_TEXTURE_COORD25_EXT     0x87B6
+#define GL_OUTPUT_TEXTURE_COORD26_EXT     0x87B7
+#define GL_OUTPUT_TEXTURE_COORD27_EXT     0x87B8
+#define GL_OUTPUT_TEXTURE_COORD28_EXT     0x87B9
+#define GL_OUTPUT_TEXTURE_COORD29_EXT     0x87BA
+#define GL_OUTPUT_TEXTURE_COORD30_EXT     0x87BB
+#define GL_OUTPUT_TEXTURE_COORD31_EXT     0x87BC
+#define GL_OUTPUT_FOG_EXT                 0x87BD
+#define GL_SCALAR_EXT                     0x87BE
+#define GL_VECTOR_EXT                     0x87BF
+#define GL_MATRIX_EXT                     0x87C0
+#define GL_VARIANT_EXT                    0x87C1
+#define GL_INVARIANT_EXT                  0x87C2
+#define GL_LOCAL_CONSTANT_EXT             0x87C3
+#define GL_LOCAL_EXT                      0x87C4
+#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5
+#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6
+#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7
+#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8
+#define GL_MAX_VERTEX_SHADER_LOCALS_EXT   0x87C9
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE
+#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF
+#define GL_VERTEX_SHADER_VARIANTS_EXT     0x87D0
+#define GL_VERTEX_SHADER_INVARIANTS_EXT   0x87D1
+#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2
+#define GL_VERTEX_SHADER_LOCALS_EXT       0x87D3
+#define GL_VERTEX_SHADER_OPTIMIZED_EXT    0x87D4
+#define GL_X_EXT                          0x87D5
+#define GL_Y_EXT                          0x87D6
+#define GL_Z_EXT                          0x87D7
+#define GL_W_EXT                          0x87D8
+#define GL_NEGATIVE_X_EXT                 0x87D9
+#define GL_NEGATIVE_Y_EXT                 0x87DA
+#define GL_NEGATIVE_Z_EXT                 0x87DB
+#define GL_NEGATIVE_W_EXT                 0x87DC
+#define GL_ZERO_EXT                       0x87DD
+#define GL_ONE_EXT                        0x87DE
+#define GL_NEGATIVE_ONE_EXT               0x87DF
+#define GL_NORMALIZED_RANGE_EXT           0x87E0
+#define GL_FULL_RANGE_EXT                 0x87E1
+#define GL_CURRENT_VERTEX_EXT             0x87E2
+#define GL_MVP_MATRIX_EXT                 0x87E3
+#define GL_VARIANT_VALUE_EXT              0x87E4
+#define GL_VARIANT_DATATYPE_EXT           0x87E5
+#define GL_VARIANT_ARRAY_STRIDE_EXT       0x87E6
+#define GL_VARIANT_ARRAY_TYPE_EXT         0x87E7
+#define GL_VARIANT_ARRAY_EXT              0x87E8
+#define GL_VARIANT_ARRAY_POINTER_EXT      0x87E9
+#define GL_INVARIANT_VALUE_EXT            0x87EA
+#define GL_INVARIANT_DATATYPE_EXT         0x87EB
+#define GL_LOCAL_CONSTANT_VALUE_EXT       0x87EC
+#define GL_LOCAL_CONSTANT_DATATYPE_EXT    0x87ED
+#endif
+
+#ifndef GL_ATI_vertex_streams
+#define GL_MAX_VERTEX_STREAMS_ATI         0x876B
+#define GL_VERTEX_STREAM0_ATI             0x876C
+#define GL_VERTEX_STREAM1_ATI             0x876D
+#define GL_VERTEX_STREAM2_ATI             0x876E
+#define GL_VERTEX_STREAM3_ATI             0x876F
+#define GL_VERTEX_STREAM4_ATI             0x8770
+#define GL_VERTEX_STREAM5_ATI             0x8771
+#define GL_VERTEX_STREAM6_ATI             0x8772
+#define GL_VERTEX_STREAM7_ATI             0x8773
+#define GL_VERTEX_SOURCE_ATI              0x8774
+#endif
+
+#ifndef GL_ATI_element_array
+#define GL_ELEMENT_ARRAY_ATI              0x8768
+#define GL_ELEMENT_ARRAY_TYPE_ATI         0x8769
+#define GL_ELEMENT_ARRAY_POINTER_ATI      0x876A
+#endif
+
+#ifndef GL_SUN_mesh_array
+#define GL_QUAD_MESH_SUN                  0x8614
+#define GL_TRIANGLE_MESH_SUN              0x8615
+#endif
+
+#ifndef GL_SUN_slice_accum
+#define GL_SLICE_ACCUM_SUN                0x85CC
+#endif
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_MULTISAMPLE_FILTER_HINT_NV     0x8534
+#endif
+
+#ifndef GL_NV_depth_clamp
+#define GL_DEPTH_CLAMP_NV                 0x864F
+#endif
+
+#ifndef GL_NV_occlusion_query
+#define GL_PIXEL_COUNTER_BITS_NV          0x8864
+#define GL_CURRENT_OCCLUSION_QUERY_ID_NV  0x8865
+#define GL_PIXEL_COUNT_NV                 0x8866
+#define GL_PIXEL_COUNT_AVAILABLE_NV       0x8867
+#endif
+
+#ifndef GL_NV_point_sprite
+#define GL_POINT_SPRITE_NV                0x8861
+#define GL_COORD_REPLACE_NV               0x8862
+#define GL_POINT_SPRITE_R_MODE_NV         0x8863
+#endif
+
+#ifndef GL_NV_texture_shader3
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
+#define GL_OFFSET_HILO_TEXTURE_2D_NV      0x8854
+#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
+#define GL_DEPENDENT_HILO_TEXTURE_2D_NV   0x8858
+#define GL_DEPENDENT_RGB_TEXTURE_3D_NV    0x8859
+#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
+#define GL_DOT_PRODUCT_PASS_THROUGH_NV    0x885B
+#define GL_DOT_PRODUCT_TEXTURE_1D_NV      0x885C
+#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
+#define GL_HILO8_NV                       0x885E
+#define GL_SIGNED_HILO8_NV                0x885F
+#define GL_FORCE_BLUE_TO_ONE_NV           0x8860
+#endif
+
+#ifndef GL_NV_vertex_program1_1
+#endif
+
+#ifndef GL_EXT_shadow_funcs
+#endif
+
+#ifndef GL_EXT_stencil_two_side
+#define GL_STENCIL_TEST_TWO_SIDE_EXT      0x8910
+#define GL_ACTIVE_STENCIL_FACE_EXT        0x8911
+#endif
+
+#ifndef GL_ATI_text_fragment_shader
+#define GL_TEXT_FRAGMENT_SHADER_ATI       0x8200
+#endif
+
+#ifndef GL_APPLE_client_storage
+#define GL_UNPACK_CLIENT_STORAGE_APPLE    0x85B2
+#endif
+
+#ifndef GL_APPLE_element_array
+#define GL_ELEMENT_ARRAY_APPLE            0x8768
+#define GL_ELEMENT_ARRAY_TYPE_APPLE       0x8769
+#define GL_ELEMENT_ARRAY_POINTER_APPLE    0x876A
+#endif
+
+#ifndef GL_APPLE_fence
+#define GL_DRAW_PIXELS_APPLE              0x8A0A
+#define GL_FENCE_APPLE                    0x8A0B
+#endif
+
+#ifndef GL_APPLE_vertex_array_object
+#define GL_VERTEX_ARRAY_BINDING_APPLE     0x85B5
+#endif
+
+#ifndef GL_APPLE_vertex_array_range
+#define GL_VERTEX_ARRAY_RANGE_APPLE       0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E
+#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F
+#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521
+#define GL_STORAGE_CACHED_APPLE           0x85BE
+#define GL_STORAGE_SHARED_APPLE           0x85BF
+#endif
+
+#ifndef GL_APPLE_ycbcr_422
+#define GL_YCBCR_422_APPLE                0x85B9
+#define GL_UNSIGNED_SHORT_8_8_APPLE       0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE   0x85BB
+#endif
+
+#ifndef GL_S3_s3tc
+#define GL_RGB_S3TC                       0x83A0
+#define GL_RGB4_S3TC                      0x83A1
+#define GL_RGBA_S3TC                      0x83A2
+#define GL_RGBA4_S3TC                     0x83A3
+#endif
+
+#ifndef GL_ATI_draw_buffers
+#define GL_MAX_DRAW_BUFFERS_ATI           0x8824
+#define GL_DRAW_BUFFER0_ATI               0x8825
+#define GL_DRAW_BUFFER1_ATI               0x8826
+#define GL_DRAW_BUFFER2_ATI               0x8827
+#define GL_DRAW_BUFFER3_ATI               0x8828
+#define GL_DRAW_BUFFER4_ATI               0x8829
+#define GL_DRAW_BUFFER5_ATI               0x882A
+#define GL_DRAW_BUFFER6_ATI               0x882B
+#define GL_DRAW_BUFFER7_ATI               0x882C
+#define GL_DRAW_BUFFER8_ATI               0x882D
+#define GL_DRAW_BUFFER9_ATI               0x882E
+#define GL_DRAW_BUFFER10_ATI              0x882F
+#define GL_DRAW_BUFFER11_ATI              0x8830
+#define GL_DRAW_BUFFER12_ATI              0x8831
+#define GL_DRAW_BUFFER13_ATI              0x8832
+#define GL_DRAW_BUFFER14_ATI              0x8833
+#define GL_DRAW_BUFFER15_ATI              0x8834
+#endif
+
+#ifndef GL_ATI_pixel_format_float
+#define GL_TYPE_RGBA_FLOAT_ATI            0x8820
+#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835
+#endif
+
+#ifndef GL_ATI_texture_env_combine3
+#define GL_MODULATE_ADD_ATI               0x8744
+#define GL_MODULATE_SIGNED_ADD_ATI        0x8745
+#define GL_MODULATE_SUBTRACT_ATI          0x8746
+#endif
+
+#ifndef GL_ATI_texture_float
+#define GL_RGBA_FLOAT32_ATI               0x8814
+#define GL_RGB_FLOAT32_ATI                0x8815
+#define GL_ALPHA_FLOAT32_ATI              0x8816
+#define GL_INTENSITY_FLOAT32_ATI          0x8817
+#define GL_LUMINANCE_FLOAT32_ATI          0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_ATI    0x8819
+#define GL_RGBA_FLOAT16_ATI               0x881A
+#define GL_RGB_FLOAT16_ATI                0x881B
+#define GL_ALPHA_FLOAT16_ATI              0x881C
+#define GL_INTENSITY_FLOAT16_ATI          0x881D
+#define GL_LUMINANCE_FLOAT16_ATI          0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_ATI    0x881F
+#endif
+
+#ifndef GL_NV_float_buffer
+#define GL_FLOAT_R_NV                     0x8880
+#define GL_FLOAT_RG_NV                    0x8881
+#define GL_FLOAT_RGB_NV                   0x8882
+#define GL_FLOAT_RGBA_NV                  0x8883
+#define GL_FLOAT_R16_NV                   0x8884
+#define GL_FLOAT_R32_NV                   0x8885
+#define GL_FLOAT_RG16_NV                  0x8886
+#define GL_FLOAT_RG32_NV                  0x8887
+#define GL_FLOAT_RGB16_NV                 0x8888
+#define GL_FLOAT_RGB32_NV                 0x8889
+#define GL_FLOAT_RGBA16_NV                0x888A
+#define GL_FLOAT_RGBA32_NV                0x888B
+#define GL_TEXTURE_FLOAT_COMPONENTS_NV    0x888C
+#define GL_FLOAT_CLEAR_COLOR_VALUE_NV     0x888D
+#define GL_FLOAT_RGBA_MODE_NV             0x888E
+#endif
+
+#ifndef GL_NV_fragment_program
+#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868
+#define GL_FRAGMENT_PROGRAM_NV            0x8870
+#define GL_MAX_TEXTURE_COORDS_NV          0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_NV     0x8872
+#define GL_FRAGMENT_PROGRAM_BINDING_NV    0x8873
+#define GL_PROGRAM_ERROR_STRING_NV        0x8874
+#endif
+
+#ifndef GL_NV_half_float
+#define GL_HALF_FLOAT_NV                  0x140B
+#endif
+
+#ifndef GL_NV_pixel_data_range
+#define GL_WRITE_PIXEL_DATA_RANGE_NV      0x8878
+#define GL_READ_PIXEL_DATA_RANGE_NV       0x8879
+#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A
+#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B
+#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C
+#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D
+#endif
+
+#ifndef GL_NV_primitive_restart
+#define GL_PRIMITIVE_RESTART_NV           0x8558
+#define GL_PRIMITIVE_RESTART_INDEX_NV     0x8559
+#endif
+
+#ifndef GL_NV_texture_expand_normal
+#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F
+#endif
+
+#ifndef GL_NV_vertex_program2
+#endif
+
+#ifndef GL_ATI_map_object_buffer
+#endif
+
+#ifndef GL_ATI_separate_stencil
+#define GL_STENCIL_BACK_FUNC_ATI          0x8800
+#define GL_STENCIL_BACK_FAIL_ATI          0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
+#endif
+
+#ifndef GL_ATI_vertex_attrib_array_object
+#endif
+
+#ifndef GL_OES_read_format
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B
+#endif
+
+#ifndef GL_EXT_depth_bounds_test
+#define GL_DEPTH_BOUNDS_TEST_EXT          0x8890
+#define GL_DEPTH_BOUNDS_EXT               0x8891
+#endif
+
+#ifndef GL_EXT_texture_mirror_clamp
+#define GL_MIRROR_CLAMP_EXT               0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_EXT       0x8743
+#define GL_MIRROR_CLAMP_TO_BORDER_EXT     0x8912
+#endif
+
+#ifndef GL_EXT_blend_equation_separate
+#define GL_BLEND_EQUATION_RGB_EXT         GL_BLEND_EQUATION
+#define GL_BLEND_EQUATION_ALPHA_EXT       0x883D
+#endif
+
+#ifndef GL_MESA_pack_invert
+#define GL_PACK_INVERT_MESA               0x8758
+#endif
+
+#ifndef GL_MESA_ycbcr_texture
+#define GL_UNSIGNED_SHORT_8_8_MESA        0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_MESA    0x85BB
+#define GL_YCBCR_MESA                     0x8757
+#endif
+
+#ifndef GL_EXT_pixel_buffer_object
+#define GL_PIXEL_PACK_BUFFER_EXT          0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_EXT        0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_EXT  0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF
+#endif
+
+#ifndef GL_NV_fragment_program_option
+#endif
+
+#ifndef GL_NV_fragment_program2
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV      0x88F5
+#define GL_MAX_PROGRAM_IF_DEPTH_NV        0x88F6
+#define GL_MAX_PROGRAM_LOOP_DEPTH_NV      0x88F7
+#define GL_MAX_PROGRAM_LOOP_COUNT_NV      0x88F8
+#endif
+
+#ifndef GL_NV_vertex_program2_option
+/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
+/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */
+#endif
+
+#ifndef GL_NV_vertex_program3
+/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */
+#endif
+
+#ifndef GL_EXT_framebuffer_object
+#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
+#define GL_MAX_RENDERBUFFER_SIZE_EXT      0x84E8
+#define GL_FRAMEBUFFER_BINDING_EXT        0x8CA6
+#define GL_RENDERBUFFER_BINDING_EXT       0x8CA7
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE_EXT       0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED_EXT    0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS_EXT      0x8CDF
+#define GL_COLOR_ATTACHMENT0_EXT          0x8CE0
+#define GL_COLOR_ATTACHMENT1_EXT          0x8CE1
+#define GL_COLOR_ATTACHMENT2_EXT          0x8CE2
+#define GL_COLOR_ATTACHMENT3_EXT          0x8CE3
+#define GL_COLOR_ATTACHMENT4_EXT          0x8CE4
+#define GL_COLOR_ATTACHMENT5_EXT          0x8CE5
+#define GL_COLOR_ATTACHMENT6_EXT          0x8CE6
+#define GL_COLOR_ATTACHMENT7_EXT          0x8CE7
+#define GL_COLOR_ATTACHMENT8_EXT          0x8CE8
+#define GL_COLOR_ATTACHMENT9_EXT          0x8CE9
+#define GL_COLOR_ATTACHMENT10_EXT         0x8CEA
+#define GL_COLOR_ATTACHMENT11_EXT         0x8CEB
+#define GL_COLOR_ATTACHMENT12_EXT         0x8CEC
+#define GL_COLOR_ATTACHMENT13_EXT         0x8CED
+#define GL_COLOR_ATTACHMENT14_EXT         0x8CEE
+#define GL_COLOR_ATTACHMENT15_EXT         0x8CEF
+#define GL_DEPTH_ATTACHMENT_EXT           0x8D00
+#define GL_STENCIL_ATTACHMENT_EXT         0x8D20
+#define GL_FRAMEBUFFER_EXT                0x8D40
+#define GL_RENDERBUFFER_EXT               0x8D41
+#define GL_RENDERBUFFER_WIDTH_EXT         0x8D42
+#define GL_RENDERBUFFER_HEIGHT_EXT        0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44
+#define GL_STENCIL_INDEX1_EXT             0x8D46
+#define GL_STENCIL_INDEX4_EXT             0x8D47
+#define GL_STENCIL_INDEX8_EXT             0x8D48
+#define GL_STENCIL_INDEX16_EXT            0x8D49
+#define GL_RENDERBUFFER_RED_SIZE_EXT      0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE_EXT    0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE_EXT     0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE_EXT    0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE_EXT    0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE_EXT  0x8D55
+#endif
+
+#ifndef GL_GREMEDY_string_marker
+#endif
+
+#ifndef GL_EXT_packed_depth_stencil
+#define GL_DEPTH_STENCIL_EXT              0x84F9
+#define GL_UNSIGNED_INT_24_8_EXT          0x84FA
+#define GL_DEPTH24_STENCIL8_EXT           0x88F0
+#define GL_TEXTURE_STENCIL_SIZE_EXT       0x88F1
+#endif
+
+#ifndef GL_EXT_stencil_clear_tag
+#define GL_STENCIL_TAG_BITS_EXT           0x88F2
+#define GL_STENCIL_CLEAR_TAG_VALUE_EXT    0x88F3
+#endif
+
+#ifndef GL_EXT_texture_sRGB
+#define GL_SRGB_EXT                       0x8C40
+#define GL_SRGB8_EXT                      0x8C41
+#define GL_SRGB_ALPHA_EXT                 0x8C42
+#define GL_SRGB8_ALPHA8_EXT               0x8C43
+#define GL_SLUMINANCE_ALPHA_EXT           0x8C44
+#define GL_SLUMINANCE8_ALPHA8_EXT         0x8C45
+#define GL_SLUMINANCE_EXT                 0x8C46
+#define GL_SLUMINANCE8_EXT                0x8C47
+#define GL_COMPRESSED_SRGB_EXT            0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA_EXT      0x8C49
+#define GL_COMPRESSED_SLUMINANCE_EXT      0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT  0x8C4C
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
+#endif
+
+#ifndef GL_EXT_framebuffer_blit
+#define GL_READ_FRAMEBUFFER_EXT           0x8CA8
+#define GL_DRAW_FRAMEBUFFER_EXT           0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT   GL_FRAMEBUFFER_BINDING_EXT
+#define GL_READ_FRAMEBUFFER_BINDING_EXT   0x8CAA
+#endif
+
+#ifndef GL_EXT_framebuffer_multisample
+#define GL_RENDERBUFFER_SAMPLES_EXT       0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
+#define GL_MAX_SAMPLES_EXT                0x8D57
+#endif
+
+#ifndef GL_MESAX_texture_stack
+#define GL_TEXTURE_1D_STACK_MESAX         0x8759
+#define GL_TEXTURE_2D_STACK_MESAX         0x875A
+#define GL_PROXY_TEXTURE_1D_STACK_MESAX   0x875B
+#define GL_PROXY_TEXTURE_2D_STACK_MESAX   0x875C
+#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D
+#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E
+#endif
+
+#ifndef GL_EXT_timer_query
+#define GL_TIME_ELAPSED_EXT               0x88BF
+#endif
+
+#ifndef GL_EXT_gpu_program_parameters
+#endif
+
+#ifndef GL_APPLE_flush_buffer_range
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE    0x8A13
+#endif
+
+#ifndef GL_NV_gpu_program4
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV    0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV    0x8905
+#define GL_PROGRAM_ATTRIB_COMPONENTS_NV   0x8906
+#define GL_PROGRAM_RESULT_COMPONENTS_NV   0x8907
+#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908
+#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909
+#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5
+#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6
+#endif
+
+#ifndef GL_NV_geometry_program4
+#define GL_LINES_ADJACENCY_EXT            0x000A
+#define GL_LINE_STRIP_ADJACENCY_EXT       0x000B
+#define GL_TRIANGLES_ADJACENCY_EXT        0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_EXT   0x000D
+#define GL_GEOMETRY_PROGRAM_NV            0x8C26
+#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27
+#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28
+#define GL_GEOMETRY_VERTICES_OUT_EXT      0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_EXT        0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_EXT       0x8DDC
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4
+#define GL_PROGRAM_POINT_SIZE_EXT         0x8642
+#endif
+
+#ifndef GL_EXT_geometry_shader4
+#define GL_GEOMETRY_SHADER_EXT            0x8DD9
+/* reuse GL_GEOMETRY_VERTICES_OUT_EXT */
+/* reuse GL_GEOMETRY_INPUT_TYPE_EXT */
+/* reuse GL_GEOMETRY_OUTPUT_TYPE_EXT */
+/* reuse GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE
+#define GL_MAX_VARYING_COMPONENTS_EXT     0x8B4B
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1
+/* reuse GL_LINES_ADJACENCY_EXT */
+/* reuse GL_LINE_STRIP_ADJACENCY_EXT */
+/* reuse GL_TRIANGLES_ADJACENCY_EXT */
+/* reuse GL_TRIANGLE_STRIP_ADJACENCY_EXT */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
+/* reuse GL_PROGRAM_POINT_SIZE_EXT */
+#endif
+
+#ifndef GL_NV_vertex_program4
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD
+#endif
+
+#ifndef GL_EXT_gpu_shader4
+#define GL_SAMPLER_1D_ARRAY_EXT           0x8DC0
+#define GL_SAMPLER_2D_ARRAY_EXT           0x8DC1
+#define GL_SAMPLER_BUFFER_EXT             0x8DC2
+#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT    0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT    0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW_EXT        0x8DC5
+#define GL_UNSIGNED_INT_VEC2_EXT          0x8DC6
+#define GL_UNSIGNED_INT_VEC3_EXT          0x8DC7
+#define GL_UNSIGNED_INT_VEC4_EXT          0x8DC8
+#define GL_INT_SAMPLER_1D_EXT             0x8DC9
+#define GL_INT_SAMPLER_2D_EXT             0x8DCA
+#define GL_INT_SAMPLER_3D_EXT             0x8DCB
+#define GL_INT_SAMPLER_CUBE_EXT           0x8DCC
+#define GL_INT_SAMPLER_2D_RECT_EXT        0x8DCD
+#define GL_INT_SAMPLER_1D_ARRAY_EXT       0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY_EXT       0x8DCF
+#define GL_INT_SAMPLER_BUFFER_EXT         0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_1D_EXT    0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D_EXT    0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D_EXT    0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT  0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8
+#endif
+
+#ifndef GL_EXT_draw_instanced
+#endif
+
+#ifndef GL_EXT_packed_float
+#define GL_R11F_G11F_B10F_EXT             0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B
+#define GL_RGBA_SIGNED_COMPONENTS_EXT     0x8C3C
+#endif
+
+#ifndef GL_EXT_texture_array
+#define GL_TEXTURE_1D_ARRAY_EXT           0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY_EXT     0x8C19
+#define GL_TEXTURE_2D_ARRAY_EXT           0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY_EXT     0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY_EXT   0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY_EXT   0x8C1D
+#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT   0x88FF
+#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
+#endif
+
+#ifndef GL_EXT_texture_buffer_object
+#define GL_TEXTURE_BUFFER_EXT             0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT    0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_EXT     0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_EXT      0x8C2E
+#endif
+
+#ifndef GL_EXT_texture_compression_latc
+#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70
+#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71
+#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72
+#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73
+#endif
+
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_COMPRESSED_RED_RGTC1_EXT       0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE
+#endif
+
+#ifndef GL_EXT_texture_shared_exponent
+#define GL_RGB9_E5_EXT                    0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT   0x8C3E
+#define GL_TEXTURE_SHARED_SIZE_EXT        0x8C3F
+#endif
+
+#ifndef GL_NV_depth_buffer_float
+#define GL_DEPTH_COMPONENT32F_NV          0x8DAB
+#define GL_DEPTH32F_STENCIL8_NV           0x8DAC
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD
+#define GL_DEPTH_BUFFER_FLOAT_MODE_NV     0x8DAF
+#endif
+
+#ifndef GL_NV_fragment_program4
+#endif
+
+#ifndef GL_NV_framebuffer_multisample_coverage
+#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB
+#define GL_RENDERBUFFER_COLOR_SAMPLES_NV  0x8E10
+#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11
+#define GL_MULTISAMPLE_COVERAGE_MODES_NV  0x8E12
+#endif
+
+#ifndef GL_EXT_framebuffer_sRGB
+#define GL_FRAMEBUFFER_SRGB_EXT           0x8DB9
+#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT   0x8DBA
+#endif
+
+#ifndef GL_NV_geometry_shader4
+#endif
+
+#ifndef GL_NV_parameter_buffer_object
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1
+#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2
+#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3
+#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4
+#endif
+
+#ifndef GL_EXT_draw_buffers2
+#endif
+
+#ifndef GL_NV_transform_feedback
+#define GL_BACK_PRIMARY_COLOR_NV          0x8C77
+#define GL_BACK_SECONDARY_COLOR_NV        0x8C78
+#define GL_TEXTURE_COORD_NV               0x8C79
+#define GL_CLIP_DISTANCE_NV               0x8C7A
+#define GL_VERTEX_ID_NV                   0x8C7B
+#define GL_PRIMITIVE_ID_NV                0x8C7C
+#define GL_GENERIC_ATTRIB_NV              0x8C7D
+#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV  0x8C7E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80
+#define GL_ACTIVE_VARYINGS_NV             0x8C81
+#define GL_ACTIVE_VARYING_MAX_LENGTH_NV   0x8C82
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85
+#define GL_TRANSFORM_FEEDBACK_RECORD_NV   0x8C86
+#define GL_PRIMITIVES_GENERATED_NV        0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88
+#define GL_RASTERIZER_DISCARD_NV          0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_ATTRIBS_NV 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS_NV         0x8C8C
+#define GL_SEPARATE_ATTRIBS_NV            0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER_NV   0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F
+#endif
+
+#ifndef GL_EXT_bindable_uniform
+#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2
+#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3
+#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4
+#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT  0x8DED
+#define GL_UNIFORM_BUFFER_EXT             0x8DEE
+#define GL_UNIFORM_BUFFER_BINDING_EXT     0x8DEF
+#endif
+
+#ifndef GL_EXT_texture_integer
+#define GL_RGBA32UI_EXT                   0x8D70
+#define GL_RGB32UI_EXT                    0x8D71
+#define GL_ALPHA32UI_EXT                  0x8D72
+#define GL_INTENSITY32UI_EXT              0x8D73
+#define GL_LUMINANCE32UI_EXT              0x8D74
+#define GL_LUMINANCE_ALPHA32UI_EXT        0x8D75
+#define GL_RGBA16UI_EXT                   0x8D76
+#define GL_RGB16UI_EXT                    0x8D77
+#define GL_ALPHA16UI_EXT                  0x8D78
+#define GL_INTENSITY16UI_EXT              0x8D79
+#define GL_LUMINANCE16UI_EXT              0x8D7A
+#define GL_LUMINANCE_ALPHA16UI_EXT        0x8D7B
+#define GL_RGBA8UI_EXT                    0x8D7C
+#define GL_RGB8UI_EXT                     0x8D7D
+#define GL_ALPHA8UI_EXT                   0x8D7E
+#define GL_INTENSITY8UI_EXT               0x8D7F
+#define GL_LUMINANCE8UI_EXT               0x8D80
+#define GL_LUMINANCE_ALPHA8UI_EXT         0x8D81
+#define GL_RGBA32I_EXT                    0x8D82
+#define GL_RGB32I_EXT                     0x8D83
+#define GL_ALPHA32I_EXT                   0x8D84
+#define GL_INTENSITY32I_EXT               0x8D85
+#define GL_LUMINANCE32I_EXT               0x8D86
+#define GL_LUMINANCE_ALPHA32I_EXT         0x8D87
+#define GL_RGBA16I_EXT                    0x8D88
+#define GL_RGB16I_EXT                     0x8D89
+#define GL_ALPHA16I_EXT                   0x8D8A
+#define GL_INTENSITY16I_EXT               0x8D8B
+#define GL_LUMINANCE16I_EXT               0x8D8C
+#define GL_LUMINANCE_ALPHA16I_EXT         0x8D8D
+#define GL_RGBA8I_EXT                     0x8D8E
+#define GL_RGB8I_EXT                      0x8D8F
+#define GL_ALPHA8I_EXT                    0x8D90
+#define GL_INTENSITY8I_EXT                0x8D91
+#define GL_LUMINANCE8I_EXT                0x8D92
+#define GL_LUMINANCE_ALPHA8I_EXT          0x8D93
+#define GL_RED_INTEGER_EXT                0x8D94
+#define GL_GREEN_INTEGER_EXT              0x8D95
+#define GL_BLUE_INTEGER_EXT               0x8D96
+#define GL_ALPHA_INTEGER_EXT              0x8D97
+#define GL_RGB_INTEGER_EXT                0x8D98
+#define GL_RGBA_INTEGER_EXT               0x8D99
+#define GL_BGR_INTEGER_EXT                0x8D9A
+#define GL_BGRA_INTEGER_EXT               0x8D9B
+#define GL_LUMINANCE_INTEGER_EXT          0x8D9C
+#define GL_LUMINANCE_ALPHA_INTEGER_EXT    0x8D9D
+#define GL_RGBA_INTEGER_MODE_EXT          0x8D9E
+#endif
+
+#ifndef GL_GREMEDY_frame_terminator
+#endif
+
+#ifndef GL_NV_conditional_render
+#define GL_QUERY_WAIT_NV                  0x8E13
+#define GL_QUERY_NO_WAIT_NV               0x8E14
+#define GL_QUERY_BY_REGION_WAIT_NV        0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT_NV     0x8E16
+#endif
+
+#ifndef GL_NV_present_video
+#define GL_FRAME_NV                       0x8E26
+#define GL_FIELDS_NV                      0x8E27
+#define GL_CURRENT_TIME_NV                0x8E28
+#define GL_NUM_FILL_STREAMS_NV            0x8E29
+#define GL_PRESENT_TIME_NV                0x8E2A
+#define GL_PRESENT_DURATION_NV            0x8E2B
+#endif
+
+#ifndef GL_EXT_transform_feedback
+#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT  0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F
+#define GL_INTERLEAVED_ATTRIBS_EXT        0x8C8C
+#define GL_SEPARATE_ATTRIBS_EXT           0x8C8D
+#define GL_PRIMITIVES_GENERATED_EXT       0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88
+#define GL_RASTERIZER_DISCARD_EXT         0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76
+#endif
+
+
+/*************************************************************/
+
+#include <stddef.h>
+#ifndef GL_VERSION_2_0
+/* GL type for program/shader text */
+typedef char GLchar;			/* native character */
+#endif
+
+#ifndef GL_VERSION_1_5
+/* GL types for handling large vertex buffer objects */
+typedef ptrdiff_t GLintptr;
+typedef ptrdiff_t GLsizeiptr;
+#endif
+
+#ifndef GL_ARB_vertex_buffer_object
+/* GL types for handling large vertex buffer objects */
+typedef ptrdiff_t GLintptrARB;
+typedef ptrdiff_t GLsizeiptrARB;
+#endif
+
+#ifndef GL_ARB_shader_objects
+/* GL types for handling shader object handles and program/shader text */
+typedef char GLcharARB;		/* native character */
+typedef unsigned int VBoxGLhandleARB;	/* shader object handle */
+# ifdef RT_OS_DARWIN
+typedef void* GLhandleARB;   /* shader object handle */
+# else
+typedef unsigned int GLhandleARB;   /* native shader object handle */
+# endif
+#else
+# error "GL_ARB_shader_objects should NOT be defined here!!"
+#endif
+
+/* GL types for "half" precision (s10e5) float data in host memory */
+#ifndef GL_ARB_half_float_pixel
+typedef unsigned short GLhalfARB;
+#endif
+
+#ifndef GL_NV_half_float
+typedef unsigned short GLhalfNV;
+#endif
+
+#ifndef GLEXT_64_TYPES_DEFINED
+/* This code block is duplicated in glxext.h, so must be protected */
+#define GLEXT_64_TYPES_DEFINED
+/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
+/* (as used in the GL_EXT_timer_query extension). */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <inttypes.h>
+#elif defined(__sun__) || defined(__digital__)
+#include <inttypes.h>
+#if defined(__STDC__)
+#if defined(__arch64__) || defined(_LP64)
+typedef long int int64_t;
+typedef unsigned long int uint64_t;
+#else
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#endif /* __arch64__ */
+#endif /* __STDC__ */
+#elif defined( __VMS ) || defined(__sgi)
+#include <inttypes.h>
+#elif defined(__SCO__) || defined(__USLC__)
+#include <stdint.h>
+#elif defined(__UNIXOS2__) || defined(__SOL64__)
+typedef long int int32_t;
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#elif defined(_WIN32) && defined(__GNUC__)
+#include <stdint.h>
+#elif defined(_WIN32)
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#else
+#include <inttypes.h>     /* Fallback option */
+#endif
+#endif
+
+#ifndef GL_EXT_timer_query
+typedef int64_t GLint64EXT;
+typedef uint64_t GLuint64EXT;
+#endif
+
+#ifndef GL_VERSION_1_2
+#define GL_VERSION_1_2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf);
+GLAPI void APIENTRY glBlendEquation (GLenum);
+GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);
+GLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei);
+GLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *);
+GLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *);
+GLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean);
+GLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean);
+GLAPI void APIENTRY glResetHistogram (GLenum);
+GLAPI void APIENTRY glResetMinmax (GLenum);
+GLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_VERSION_1_3
+#define GL_VERSION_1_3 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTexture (GLenum);
+GLAPI void APIENTRY glClientActiveTexture (GLenum);
+GLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint);
+GLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort);
+GLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *);
+GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *);
+GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *);
+GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *);
+GLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean);
+GLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img);
+#endif
+
+#ifndef GL_VERSION_1_4
+#define GL_VERSION_1_4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparate (GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glFogCoordf (GLfloat);
+GLAPI void APIENTRY glFogCoordfv (const GLfloat *);
+GLAPI void APIENTRY glFogCoordd (GLdouble);
+GLAPI void APIENTRY glFogCoorddv (const GLdouble *);
+GLAPI void APIENTRY glFogCoordPointer (GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glMultiDrawArrays (GLenum, GLint *, GLsizei *, GLsizei);
+GLAPI void APIENTRY glMultiDrawElements (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
+GLAPI void APIENTRY glPointParameterf (GLenum, GLfloat);
+GLAPI void APIENTRY glPointParameterfv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glPointParameteri (GLenum, GLint);
+GLAPI void APIENTRY glPointParameteriv (GLenum, const GLint *);
+GLAPI void APIENTRY glSecondaryColor3b (GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *);
+GLAPI void APIENTRY glSecondaryColor3d (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *);
+GLAPI void APIENTRY glSecondaryColor3f (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *);
+GLAPI void APIENTRY glSecondaryColor3i (GLint, GLint, GLint);
+GLAPI void APIENTRY glSecondaryColor3iv (const GLint *);
+GLAPI void APIENTRY glSecondaryColor3s (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *);
+GLAPI void APIENTRY glSecondaryColor3ub (GLubyte, GLubyte, GLubyte);
+GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *);
+GLAPI void APIENTRY glSecondaryColor3ui (GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *);
+GLAPI void APIENTRY glSecondaryColor3us (GLushort, GLushort, GLushort);
+GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *);
+GLAPI void APIENTRY glSecondaryColorPointer (GLint, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glWindowPos2d (GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos2dv (const GLdouble *);
+GLAPI void APIENTRY glWindowPos2f (GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos2fv (const GLfloat *);
+GLAPI void APIENTRY glWindowPos2i (GLint, GLint);
+GLAPI void APIENTRY glWindowPos2iv (const GLint *);
+GLAPI void APIENTRY glWindowPos2s (GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos2sv (const GLshort *);
+GLAPI void APIENTRY glWindowPos3d (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos3dv (const GLdouble *);
+GLAPI void APIENTRY glWindowPos3f (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos3fv (const GLfloat *);
+GLAPI void APIENTRY glWindowPos3i (GLint, GLint, GLint);
+GLAPI void APIENTRY glWindowPos3iv (const GLint *);
+GLAPI void APIENTRY glWindowPos3s (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos3sv (const GLshort *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord);
+typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v);
+#endif
+
+#ifndef GL_VERSION_1_5
+#define GL_VERSION_1_5 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueries (GLsizei, GLuint *);
+GLAPI void APIENTRY glDeleteQueries (GLsizei, const GLuint *);
+GLAPI GLboolean APIENTRY glIsQuery (GLuint);
+GLAPI void APIENTRY glBeginQuery (GLenum, GLuint);
+GLAPI void APIENTRY glEndQuery (GLenum);
+GLAPI void APIENTRY glGetQueryiv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetQueryObjectiv (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetQueryObjectuiv (GLuint, GLenum, GLuint *);
+GLAPI void APIENTRY glBindBuffer (GLenum, GLuint);
+GLAPI void APIENTRY glDeleteBuffers (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenBuffers (GLsizei, GLuint *);
+GLAPI GLboolean APIENTRY glIsBuffer (GLuint);
+GLAPI void APIENTRY glBufferData (GLenum, GLsizeiptr, const GLvoid *, GLenum);
+GLAPI void APIENTRY glBufferSubData (GLenum, GLintptr, GLsizeiptr, const GLvoid *);
+GLAPI void APIENTRY glGetBufferSubData (GLenum, GLintptr, GLsizeiptr, GLvoid *);
+GLAPI GLvoid* APIENTRY glMapBuffer (GLenum, GLenum);
+GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum);
+GLAPI void APIENTRY glGetBufferParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetBufferPointerv (GLenum, GLenum, GLvoid* *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
+typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params);
+#endif
+
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationSeparate (GLenum, GLenum);
+GLAPI void APIENTRY glDrawBuffers (GLsizei, const GLenum *);
+GLAPI void APIENTRY glStencilOpSeparate (GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glStencilFuncSeparate (GLenum, GLenum, GLint, GLuint);
+GLAPI void APIENTRY glStencilMaskSeparate (GLenum, GLuint);
+GLAPI void APIENTRY glAttachShader (GLuint, GLuint);
+GLAPI void APIENTRY glBindAttribLocation (GLuint, GLuint, const GLchar *);
+GLAPI void APIENTRY glCompileShader (GLuint);
+GLAPI GLuint APIENTRY glCreateProgram (void);
+GLAPI GLuint APIENTRY glCreateShader (GLenum);
+GLAPI void APIENTRY glDeleteProgram (GLuint);
+GLAPI void APIENTRY glDeleteShader (GLuint);
+GLAPI void APIENTRY glDetachShader (GLuint, GLuint);
+GLAPI void APIENTRY glDisableVertexAttribArray (GLuint);
+GLAPI void APIENTRY glEnableVertexAttribArray (GLuint);
+GLAPI void APIENTRY glGetActiveAttrib (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *);
+GLAPI void APIENTRY glGetActiveUniform (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *);
+GLAPI void APIENTRY glGetAttachedShaders (GLuint, GLsizei, GLsizei *, GLuint *);
+GLAPI GLint APIENTRY glGetAttribLocation (GLuint, const GLchar *);
+GLAPI void APIENTRY glGetProgramiv (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetProgramInfoLog (GLuint, GLsizei, GLsizei *, GLchar *);
+GLAPI void APIENTRY glGetShaderiv (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetShaderInfoLog (GLuint, GLsizei, GLsizei *, GLchar *);
+GLAPI void APIENTRY glGetShaderSource (GLuint, GLsizei, GLsizei *, GLchar *);
+GLAPI GLint APIENTRY glGetUniformLocation (GLuint, const GLchar *);
+GLAPI void APIENTRY glGetUniformfv (GLuint, GLint, GLfloat *);
+GLAPI void APIENTRY glGetUniformiv (GLuint, GLint, GLint *);
+GLAPI void APIENTRY glGetVertexAttribdv (GLuint, GLenum, GLdouble *);
+GLAPI void APIENTRY glGetVertexAttribfv (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVertexAttribiv (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint, GLenum, GLvoid* *);
+GLAPI GLboolean APIENTRY glIsProgram (GLuint);
+GLAPI GLboolean APIENTRY glIsShader (GLuint);
+GLAPI void APIENTRY glLinkProgram (GLuint);
+GLAPI void APIENTRY glShaderSource (GLuint, GLsizei, const GLchar* *, const GLint *);
+GLAPI void APIENTRY glUseProgram (GLuint);
+GLAPI void APIENTRY glUniform1f (GLint, GLfloat);
+GLAPI void APIENTRY glUniform2f (GLint, GLfloat, GLfloat);
+GLAPI void APIENTRY glUniform3f (GLint, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glUniform4f (GLint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glUniform1i (GLint, GLint);
+GLAPI void APIENTRY glUniform2i (GLint, GLint, GLint);
+GLAPI void APIENTRY glUniform3i (GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glUniform4i (GLint, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glUniform1fv (GLint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glUniform2fv (GLint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glUniform3fv (GLint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glUniform4fv (GLint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glUniform1iv (GLint, GLsizei, const GLint *);
+GLAPI void APIENTRY glUniform2iv (GLint, GLsizei, const GLint *);
+GLAPI void APIENTRY glUniform3iv (GLint, GLsizei, const GLint *);
+GLAPI void APIENTRY glUniform4iv (GLint, GLsizei, const GLint *);
+GLAPI void APIENTRY glUniformMatrix2fv (GLint, GLsizei, GLboolean, const GLfloat *);
+GLAPI void APIENTRY glUniformMatrix3fv (GLint, GLsizei, GLboolean, const GLfloat *);
+GLAPI void APIENTRY glUniformMatrix4fv (GLint, GLsizei, GLboolean, const GLfloat *);
+GLAPI void APIENTRY glValidateProgram (GLuint);
+GLAPI void APIENTRY glVertexAttrib1d (GLuint, GLdouble);
+GLAPI void APIENTRY glVertexAttrib1dv (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib1f (GLuint, GLfloat);
+GLAPI void APIENTRY glVertexAttrib1fv (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib1s (GLuint, GLshort);
+GLAPI void APIENTRY glVertexAttrib1sv (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib2d (GLuint, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib2dv (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib2f (GLuint, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib2fv (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib2s (GLuint, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib2sv (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib3d (GLuint, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib3dv (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib3f (GLuint, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib3fv (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib3s (GLuint, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib3sv (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint, const GLbyte *);
+GLAPI void APIENTRY glVertexAttrib4Niv (GLuint, const GLint *);
+GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4Nub (GLuint, GLubyte, GLubyte, GLubyte, GLubyte);
+GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint, const GLubyte *);
+GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint, const GLuint *);
+GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint, const GLushort *);
+GLAPI void APIENTRY glVertexAttrib4bv (GLuint, const GLbyte *);
+GLAPI void APIENTRY glVertexAttrib4d (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib4dv (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib4f (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib4fv (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib4iv (GLuint, const GLint *);
+GLAPI void APIENTRY glVertexAttrib4s (GLuint, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib4sv (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4ubv (GLuint, const GLubyte *);
+GLAPI void APIENTRY glVertexAttrib4uiv (GLuint, const GLuint *);
+GLAPI void APIENTRY glVertexAttrib4usv (GLuint, const GLushort *);
+GLAPI void APIENTRY glVertexAttribPointer (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length);
+typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_VERSION_2_1
+#define GL_VERSION_2_1 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniformMatrix2x3fv (GLint, GLsizei, GLboolean, const GLfloat *);
+GLAPI void APIENTRY glUniformMatrix3x2fv (GLint, GLsizei, GLboolean, const GLfloat *);
+GLAPI void APIENTRY glUniformMatrix2x4fv (GLint, GLsizei, GLboolean, const GLfloat *);
+GLAPI void APIENTRY glUniformMatrix4x2fv (GLint, GLsizei, GLboolean, const GLfloat *);
+GLAPI void APIENTRY glUniformMatrix3x4fv (GLint, GLsizei, GLboolean, const GLfloat *);
+GLAPI void APIENTRY glUniformMatrix4x3fv (GLint, GLsizei, GLboolean, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#endif
+
+#ifndef GL_VERSION_3_0
+#define GL_VERSION_3_0 1
+#endif
+
+#ifndef GL_ARB_multitexture
+#define GL_ARB_multitexture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTextureARB (GLenum);
+GLAPI void APIENTRY glClientActiveTextureARB (GLenum);
+GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint);
+GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort);
+GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
+#endif
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_ARB_transpose_matrix 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *);
+GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *);
+GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *);
+GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+#endif
+
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert);
+#endif
+
+#ifndef GL_ARB_texture_env_add
+#define GL_ARB_texture_env_add 1
+#endif
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+#endif
+
+#ifndef GL_ARB_texture_compression
+#define GL_ARB_texture_compression 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img);
+#endif
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+#endif
+
+#ifndef GL_ARB_point_parameters
+#define GL_ARB_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat);
+GLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_ARB_vertex_blend
+#define GL_ARB_vertex_blend 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *);
+GLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *);
+GLAPI void APIENTRY glWeightivARB (GLint, const GLint *);
+GLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *);
+GLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *);
+GLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *);
+GLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *);
+GLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *);
+GLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glVertexBlendARB (GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights);
+typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights);
+typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights);
+typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);
+typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights);
+typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count);
+#endif
+
+#ifndef GL_ARB_matrix_palette
+#define GL_ARB_matrix_palette 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint);
+GLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *);
+GLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *);
+GLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *);
+GLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_ARB_texture_env_combine 1
+#endif
+
+#ifndef GL_ARB_texture_env_crossbar
+#define GL_ARB_texture_env_crossbar 1
+#endif
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+#endif
+
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_ARB_texture_mirrored_repeat 1
+#endif
+
+#ifndef GL_ATI_texture_mirror_once
+#define GL_ATI_texture_mirror_once 1
+#endif
+
+#ifndef GL_ARB_depth_texture
+#define GL_ARB_depth_texture 1
+#endif
+
+#ifndef GL_ARB_shadow
+#define GL_ARB_shadow 1
+#endif
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_ARB_shadow_ambient 1
+#endif
+
+#ifndef GL_ARB_window_pos
+#define GL_ARB_window_pos 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *);
+GLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *);
+GLAPI void APIENTRY glWindowPos2iARB (GLint, GLint);
+GLAPI void APIENTRY glWindowPos2ivARB (const GLint *);
+GLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos2svARB (const GLshort *);
+GLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *);
+GLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *);
+GLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint);
+GLAPI void APIENTRY glWindowPos3ivARB (const GLint *);
+GLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos3svARB (const GLshort *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v);
+#endif
+
+#ifndef GL_ARB_vertex_program
+#define GL_ARB_vertex_program 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttrib1dARB (GLuint, GLdouble);
+GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib1fARB (GLuint, GLfloat);
+GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib1sARB (GLuint, GLshort);
+GLAPI void APIENTRY glVertexAttrib1svARB (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib2dARB (GLuint, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib2fARB (GLuint, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib2sARB (GLuint, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib2svARB (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib3dARB (GLuint, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib3fARB (GLuint, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib3sARB (GLuint, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib3svARB (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint, const GLbyte *);
+GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint, const GLint *);
+GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint, GLubyte, GLubyte, GLubyte, GLubyte);
+GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint, const GLubyte *);
+GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint, const GLuint *);
+GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint, const GLushort *);
+GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint, const GLbyte *);
+GLAPI void APIENTRY glVertexAttrib4dARB (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib4fARB (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint, const GLint *);
+GLAPI void APIENTRY glVertexAttrib4sARB (GLuint, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib4svARB (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint, const GLubyte *);
+GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint, const GLuint *);
+GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint, const GLushort *);
+GLAPI void APIENTRY glVertexAttribPointerARB (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint);
+GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint);
+GLAPI void APIENTRY glProgramStringARB (GLenum, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glBindProgramARB (GLenum, GLuint);
+GLAPI void APIENTRY glDeleteProgramsARB (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenProgramsARB (GLsizei, GLuint *);
+GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum, GLuint, const GLdouble *);
+GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum, GLuint, const GLfloat *);
+GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum, GLuint, const GLdouble *);
+GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum, GLuint, const GLfloat *);
+GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum, GLuint, GLdouble *);
+GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum, GLuint, GLfloat *);
+GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum, GLuint, GLdouble *);
+GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum, GLuint, GLfloat *);
+GLAPI void APIENTRY glGetProgramivARB (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetProgramStringARB (GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint, GLenum, GLdouble *);
+GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVertexAttribivARB (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint, GLenum, GLvoid* *);
+GLAPI GLboolean APIENTRY glIsProgramARB (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string);
+typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program);
+#endif
+
+#ifndef GL_ARB_fragment_program
+#define GL_ARB_fragment_program 1
+/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */
+#endif
+
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_ARB_vertex_buffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindBufferARB (GLenum, GLuint);
+GLAPI void APIENTRY glDeleteBuffersARB (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenBuffersARB (GLsizei, GLuint *);
+GLAPI GLboolean APIENTRY glIsBufferARB (GLuint);
+GLAPI void APIENTRY glBufferDataARB (GLenum, GLsizeiptrARB, const GLvoid *, GLenum);
+GLAPI void APIENTRY glBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *);
+GLAPI void APIENTRY glGetBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *);
+GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum, GLenum);
+GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum);
+GLAPI void APIENTRY glGetBufferParameterivARB (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetBufferPointervARB (GLenum, GLenum, GLvoid* *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
+typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params);
+#endif
+
+#ifndef GL_ARB_occlusion_query
+#define GL_ARB_occlusion_query 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueriesARB (GLsizei, GLuint *);
+GLAPI void APIENTRY glDeleteQueriesARB (GLsizei, const GLuint *);
+GLAPI GLboolean APIENTRY glIsQueryARB (GLuint);
+GLAPI void APIENTRY glBeginQueryARB (GLenum, GLuint);
+GLAPI void APIENTRY glEndQueryARB (GLenum);
+GLAPI void APIENTRY glGetQueryivARB (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetQueryObjectivARB (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint, GLenum, GLuint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params);
+#endif
+
+#ifndef GL_ARB_shader_objects
+#define GL_ARB_shader_objects 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteObjectARB (VBoxGLhandleARB);
+GLAPI VBoxGLhandleARB APIENTRY glGetHandleARB (GLenum);
+GLAPI void APIENTRY glDetachObjectARB (VBoxGLhandleARB, VBoxGLhandleARB);
+GLAPI VBoxGLhandleARB APIENTRY glCreateShaderObjectARB (GLenum);
+GLAPI void APIENTRY glShaderSourceARB (VBoxGLhandleARB, GLsizei, const GLcharARB* *, const GLint *);
+GLAPI void APIENTRY glCompileShaderARB (VBoxGLhandleARB);
+GLAPI VBoxGLhandleARB APIENTRY glCreateProgramObjectARB (void);
+GLAPI void APIENTRY glAttachObjectARB (VBoxGLhandleARB, VBoxGLhandleARB);
+GLAPI void APIENTRY glLinkProgramARB (VBoxGLhandleARB);
+GLAPI void APIENTRY glUseProgramObjectARB (VBoxGLhandleARB);
+GLAPI void APIENTRY glValidateProgramARB (VBoxGLhandleARB);
+GLAPI void APIENTRY glUniform1fARB (GLint, GLfloat);
+GLAPI void APIENTRY glUniform2fARB (GLint, GLfloat, GLfloat);
+GLAPI void APIENTRY glUniform3fARB (GLint, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glUniform4fARB (GLint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glUniform1iARB (GLint, GLint);
+GLAPI void APIENTRY glUniform2iARB (GLint, GLint, GLint);
+GLAPI void APIENTRY glUniform3iARB (GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glUniform4iARB (GLint, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glUniform1fvARB (GLint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glUniform2fvARB (GLint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glUniform3fvARB (GLint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glUniform4fvARB (GLint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glUniform1ivARB (GLint, GLsizei, const GLint *);
+GLAPI void APIENTRY glUniform2ivARB (GLint, GLsizei, const GLint *);
+GLAPI void APIENTRY glUniform3ivARB (GLint, GLsizei, const GLint *);
+GLAPI void APIENTRY glUniform4ivARB (GLint, GLsizei, const GLint *);
+GLAPI void APIENTRY glUniformMatrix2fvARB (GLint, GLsizei, GLboolean, const GLfloat *);
+GLAPI void APIENTRY glUniformMatrix3fvARB (GLint, GLsizei, GLboolean, const GLfloat *);
+GLAPI void APIENTRY glUniformMatrix4fvARB (GLint, GLsizei, GLboolean, const GLfloat *);
+GLAPI void APIENTRY glGetObjectParameterfvARB (VBoxGLhandleARB, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetObjectParameterivARB (VBoxGLhandleARB, GLenum, GLint *);
+GLAPI void APIENTRY glGetInfoLogARB (VBoxGLhandleARB, GLsizei, GLsizei *, GLcharARB *);
+GLAPI void APIENTRY glGetAttachedObjectsARB (VBoxGLhandleARB, GLsizei, GLsizei *, VBoxGLhandleARB *);
+GLAPI GLint APIENTRY glGetUniformLocationARB (VBoxGLhandleARB, const GLcharARB *);
+GLAPI void APIENTRY glGetActiveUniformARB (VBoxGLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *);
+GLAPI void APIENTRY glGetUniformfvARB (VBoxGLhandleARB, GLint, GLfloat *);
+GLAPI void APIENTRY glGetUniformivARB (VBoxGLhandleARB, GLint, GLint *);
+GLAPI void APIENTRY glGetShaderSourceARB (VBoxGLhandleARB, GLsizei, GLsizei *, GLcharARB *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (VBoxGLhandleARB obj);
+typedef VBoxGLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname);
+typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (VBoxGLhandleARB containerObj, VBoxGLhandleARB attachedObj);
+typedef VBoxGLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
+typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (VBoxGLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);
+typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (VBoxGLhandleARB shaderObj);
+typedef VBoxGLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
+typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (VBoxGLhandleARB containerObj, VBoxGLhandleARB obj);
+typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (VBoxGLhandleARB programObj);
+typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (VBoxGLhandleARB programObj);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (VBoxGLhandleARB programObj);
+typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (VBoxGLhandleARB obj, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (VBoxGLhandleARB obj, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (VBoxGLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei *count, VBoxGLhandleARB *obj);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (VBoxGLhandleARB programObj, const GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (VBoxGLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (VBoxGLhandleARB programObj, GLint location, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (VBoxGLhandleARB programObj, GLint location, GLint *params);
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (VBoxGLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
+#endif
+
+#ifndef GL_ARB_vertex_shader
+#define GL_ARB_vertex_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindAttribLocationARB (VBoxGLhandleARB, GLuint, const GLcharARB *);
+GLAPI void APIENTRY glGetActiveAttribARB (VBoxGLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *);
+GLAPI GLint APIENTRY glGetAttribLocationARB (VBoxGLhandleARB, const GLcharARB *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (VBoxGLhandleARB programObj, GLuint index, const GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (VBoxGLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (VBoxGLhandleARB programObj, const GLcharARB *name);
+#endif
+
+#ifndef GL_ARB_fragment_shader
+#define GL_ARB_fragment_shader 1
+#endif
+
+#ifndef GL_ARB_shading_language_100
+#define GL_ARB_shading_language_100 1
+#endif
+
+#ifndef GL_ARB_texture_non_power_of_two
+#define GL_ARB_texture_non_power_of_two 1
+#endif
+
+#ifndef GL_ARB_point_sprite
+#define GL_ARB_point_sprite 1
+#endif
+
+#ifndef GL_ARB_fragment_program_shadow
+#define GL_ARB_fragment_program_shadow 1
+#endif
+
+#ifndef GL_ARB_draw_buffers
+#define GL_ARB_draw_buffers 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawBuffersARB (GLsizei, const GLenum *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs);
+#endif
+
+#ifndef GL_ARB_texture_rectangle
+#define GL_ARB_texture_rectangle 1
+#endif
+
+#ifndef GL_ARB_color_buffer_float
+#define GL_ARB_color_buffer_float 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClampColorARB (GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp);
+#endif
+
+#ifndef GL_ARB_half_float_pixel
+#define GL_ARB_half_float_pixel 1
+#endif
+
+#ifndef GL_ARB_texture_float
+#define GL_ARB_texture_float 1
+#endif
+
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_ARB_pixel_buffer_object 1
+#endif
+
+#ifndef GL_ARB_depth_buffer_float
+#define GL_ARB_depth_buffer_float 1
+#endif
+
+#ifndef GL_ARB_draw_instanced
+#define GL_ARB_draw_instanced 1
+#endif
+
+#ifndef GL_ARB_framebuffer_object
+#define GL_ARB_framebuffer_object 1
+#endif
+
+#ifndef GL_ARB_framebuffer_sRGB
+#define GL_ARB_framebuffer_sRGB 1
+#endif
+
+#ifndef GL_ARB_geometry_shader4
+#define GL_ARB_geometry_shader4 1
+#endif
+
+#ifndef GL_ARB_half_float_vertex
+#define GL_ARB_half_float_vertex 1
+#endif
+
+#ifndef GL_ARB_instanced_arrays
+#define GL_ARB_instanced_arrays 1
+#endif
+
+#ifndef GL_ARB_map_buffer_range
+#define GL_ARB_map_buffer_range 1
+#endif
+
+#ifndef GL_ARB_texture_buffer_object
+#define GL_ARB_texture_buffer_object 1
+#endif
+
+#ifndef GL_ARB_texture_compression_rgtc
+#define GL_ARB_texture_compression_rgtc 1
+#endif
+
+#ifndef GL_ARB_texture_rg
+#define GL_ARB_texture_rg 1
+#endif
+
+#ifndef GL_ARB_vertex_array_object
+#define GL_ARB_vertex_array_object 1
+#endif
+
+#ifndef GL_EXT_abgr
+#define GL_EXT_abgr 1
+#endif
+
+#ifndef GL_EXT_blend_color
+#define GL_EXT_blend_color 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+#endif
+
+#ifndef GL_EXT_polygon_offset
+#define GL_EXT_polygon_offset 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);
+#endif
+
+#ifndef GL_EXT_texture
+#define GL_EXT_texture 1
+#endif
+
+#ifndef GL_EXT_texture3D
+#define GL_EXT_texture3D 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+#endif
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_SGIS_texture_filter4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights);
+typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
+#endif
+
+#ifndef GL_EXT_subtexture
+#define GL_EXT_subtexture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+#endif
+
+#ifndef GL_EXT_copy_texture
+#define GL_EXT_copy_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint);
+GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);
+GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_EXT_histogram
+#define GL_EXT_histogram 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean);
+GLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean);
+GLAPI void APIENTRY glResetHistogramEXT (GLenum);
+GLAPI void APIENTRY glResetMinmaxEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target);
+#endif
+
+#ifndef GL_EXT_convolution
+#define GL_EXT_convolution 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei);
+GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *);
+GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+#endif
+
+#ifndef GL_SGI_color_matrix
+#define GL_SGI_color_matrix 1
+#endif
+
+#ifndef GL_SGI_color_table
+#define GL_SGI_color_table 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_SGIX_pixel_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenSGIX (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);
+#endif
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_SGIS_pixel_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint);
+GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *);
+GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat);
+GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *);
+GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_SGIS_texture4D
+#define GL_SGIS_texture4D 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels);
+#endif
+
+#ifndef GL_SGI_texture_color_table
+#define GL_SGI_texture_color_table 1
+#endif
+
+#ifndef GL_EXT_cmyka
+#define GL_EXT_cmyka 1
+#endif
+
+#ifndef GL_EXT_texture_object
+#define GL_EXT_texture_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *);
+GLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint);
+GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *);
+GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint);
+GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences);
+typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures);
+typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+#endif
+
+#ifndef GL_SGIS_detail_texture
+#define GL_SGIS_detail_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#endif
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_SGIS_sharpen_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#endif
+
+#ifndef GL_EXT_packed_pixels
+#define GL_EXT_packed_pixels 1
+#endif
+
+#ifndef GL_SGIS_texture_lod
+#define GL_SGIS_texture_lod 1
+#endif
+
+#ifndef GL_SGIS_multisample
+#define GL_SGIS_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean);
+GLAPI void APIENTRY glSamplePatternSGIS (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);
+#endif
+
+#ifndef GL_EXT_rescale_normal
+#define GL_EXT_rescale_normal 1
+#endif
+
+#ifndef GL_EXT_vertex_array
+#define GL_EXT_vertex_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glArrayElementEXT (GLint);
+GLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei);
+GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *);
+GLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *);
+GLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i);
+typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);
+typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params);
+typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_misc_attribute
+#define GL_EXT_misc_attribute 1
+#endif
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_SGIS_generate_mipmap 1
+#endif
+
+#ifndef GL_SGIX_clipmap
+#define GL_SGIX_clipmap 1
+#endif
+
+#ifndef GL_SGIX_shadow
+#define GL_SGIX_shadow 1
+#endif
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_SGIS_texture_edge_clamp 1
+#endif
+
+#ifndef GL_SGIS_texture_border_clamp
+#define GL_SGIS_texture_border_clamp 1
+#endif
+
+#ifndef GL_EXT_blend_minmax
+#define GL_EXT_blend_minmax 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);
+#endif
+
+#ifndef GL_EXT_blend_subtract
+#define GL_EXT_blend_subtract 1
+#endif
+
+#ifndef GL_EXT_blend_logic_op
+#define GL_EXT_blend_logic_op 1
+#endif
+
+#ifndef GL_SGIX_interlace
+#define GL_SGIX_interlace 1
+#endif
+
+#ifndef GL_SGIX_pixel_tiles
+#define GL_SGIX_pixel_tiles 1
+#endif
+
+#ifndef GL_SGIX_texture_select
+#define GL_SGIX_texture_select 1
+#endif
+
+#ifndef GL_SGIX_sprite
+#define GL_SGIX_sprite 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat);
+GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *);
+GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint);
+GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_SGIX_texture_multi_buffer 1
+#endif
+
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat);
+GLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_SGIS_point_parameters
+#define GL_SGIS_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat);
+GLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_SGIX_instruments
+#define GL_SGIX_instruments 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLint APIENTRY glGetInstrumentsSGIX (void);
+GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *);
+GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *);
+GLAPI void APIENTRY glReadInstrumentsSGIX (GLint);
+GLAPI void APIENTRY glStartInstrumentsSGIX (void);
+GLAPI void APIENTRY glStopInstrumentsSGIX (GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer);
+typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p);
+typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker);
+typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker);
+#endif
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_SGIX_texture_scale_bias 1
+#endif
+
+#ifndef GL_SGIX_framezoom
+#define GL_SGIX_framezoom 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameZoomSGIX (GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor);
+#endif
+
+#ifndef GL_SGIX_tag_sample_buffer
+#define GL_SGIX_tag_sample_buffer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTagSampleBufferSGIX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);
+#endif
+
+#ifndef GL_SGIX_polynomial_ffd
+#define GL_SGIX_polynomial_ffd 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *);
+GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *);
+GLAPI void APIENTRY glDeformSGIX (GLbitfield);
+GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
+typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
+typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask);
+#endif
+
+#ifndef GL_SGIX_reference_plane
+#define GL_SGIX_reference_plane 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation);
+#endif
+
+#ifndef GL_SGIX_flush_raster
+#define GL_SGIX_flush_raster 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushRasterSGIX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void);
+#endif
+
+#ifndef GL_SGIX_depth_texture
+#define GL_SGIX_depth_texture 1
+#endif
+
+#ifndef GL_SGIS_fog_function
+#define GL_SGIS_fog_function 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *);
+GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points);
+#endif
+
+#ifndef GL_SGIX_fog_offset
+#define GL_SGIX_fog_offset 1
+#endif
+
+#ifndef GL_HP_image_transform
+#define GL_HP_image_transform 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_HP_convolution_border_modes 1
+#endif
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_SGIX_texture_add_env 1
+#endif
+
+#ifndef GL_EXT_color_subtable
+#define GL_EXT_color_subtable 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+#endif
+
+#ifndef GL_PGI_vertex_hints
+#define GL_PGI_vertex_hints 1
+#endif
+
+#ifndef GL_PGI_misc_hints
+#define GL_PGI_misc_hints 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glHintPGI (GLenum, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode);
+#endif
+
+#ifndef GL_EXT_paletted_texture
+#define GL_EXT_paletted_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_EXT_clip_volume_hint 1
+#endif
+
+#ifndef GL_SGIX_list_priority
+#define GL_SGIX_list_priority 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat);
+GLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *);
+GLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint);
+GLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_SGIX_ir_instrument1 1
+#endif
+
+#ifndef GL_SGIX_calligraphic_fragment
+#define GL_SGIX_calligraphic_fragment 1
+#endif
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_SGIX_texture_lod_bias 1
+#endif
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SGIX_shadow_ambient 1
+#endif
+
+#ifndef GL_EXT_index_texture
+#define GL_EXT_index_texture 1
+#endif
+
+#ifndef GL_EXT_index_material
+#define GL_EXT_index_material 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);
+#endif
+
+#ifndef GL_EXT_index_func
+#define GL_EXT_index_func 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref);
+#endif
+
+#ifndef GL_EXT_index_array_formats
+#define GL_EXT_index_array_formats 1
+#endif
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_EXT_compiled_vertex_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei);
+GLAPI void APIENTRY glUnlockArraysEXT (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void);
+#endif
+
+#ifndef GL_EXT_cull_vertex
+#define GL_EXT_cull_vertex 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *);
+GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_SGIX_ycrcb
+#define GL_SGIX_ycrcb 1
+#endif
+
+#ifndef GL_SGIX_fragment_lighting
+#define GL_SGIX_fragment_lighting 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum);
+GLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat);
+GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *);
+GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint);
+GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *);
+GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param);
+#endif
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_IBM_rasterpos_clip 1
+#endif
+
+#ifndef GL_HP_texture_lighting
+#define GL_HP_texture_lighting 1
+#endif
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_EXT_draw_range_elements 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+#endif
+
+#ifndef GL_WIN_phong_shading
+#define GL_WIN_phong_shading 1
+#endif
+
+#ifndef GL_WIN_specular_fog
+#define GL_WIN_specular_fog 1
+#endif
+
+#ifndef GL_EXT_light_texture
+#define GL_EXT_light_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glApplyTextureEXT (GLenum);
+GLAPI void APIENTRY glTextureLightEXT (GLenum);
+GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);
+typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);
+#endif
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_SGIX_blend_alpha_minmax 1
+#endif
+
+#ifndef GL_EXT_bgra
+#define GL_EXT_bgra 1
+#endif
+
+#ifndef GL_SGIX_async
+#define GL_SGIX_async 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint);
+GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *);
+GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *);
+GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei);
+GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei);
+GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker);
+typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp);
+typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp);
+typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);
+typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);
+typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);
+#endif
+
+#ifndef GL_SGIX_async_pixel
+#define GL_SGIX_async_pixel 1
+#endif
+
+#ifndef GL_SGIX_async_histogram
+#define GL_SGIX_async_histogram 1
+#endif
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_INTEL_parallel_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *);
+GLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *);
+GLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *);
+GLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+#endif
+
+#ifndef GL_HP_occlusion_test
+#define GL_HP_occlusion_test 1
+#endif
+
+#ifndef GL_EXT_pixel_transform
+#define GL_EXT_pixel_transform 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_EXT_pixel_transform_color_table
+#define GL_EXT_pixel_transform_color_table 1
+#endif
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_EXT_shared_texture_palette 1
+#endif
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_EXT_separate_specular_color 1
+#endif
+
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *);
+GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *);
+GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *);
+GLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint);
+GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *);
+GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *);
+GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte);
+GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *);
+GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *);
+GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort);
+GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *);
+GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_EXT_texture_perturb_normal 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureNormalEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode);
+#endif
+
+#ifndef GL_EXT_multi_draw_arrays
+#define GL_EXT_multi_draw_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei);
+GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
+#endif
+
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogCoordfEXT (GLfloat);
+GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *);
+GLAPI void APIENTRY glFogCoorddEXT (GLdouble);
+GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *);
+GLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord);
+typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_REND_screen_coordinates
+#define GL_REND_screen_coordinates 1
+#endif
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_EXT_coordinate_frame 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *);
+GLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *);
+GLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *);
+GLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint);
+GLAPI void APIENTRY glTangent3ivEXT (const GLint *);
+GLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glTangent3svEXT (const GLshort *);
+GLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *);
+GLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *);
+GLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *);
+GLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint);
+GLAPI void APIENTRY glBinormal3ivEXT (const GLint *);
+GLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glBinormal3svEXT (const GLshort *);
+GLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz);
+typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz);
+typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz);
+typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz);
+typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz);
+typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz);
+typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz);
+typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz);
+typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz);
+typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz);
+typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+#endif
+
+#ifndef GL_APPLE_specular_vector
+#define GL_APPLE_specular_vector 1
+#endif
+
+#ifndef GL_APPLE_transform_hint
+#define GL_APPLE_transform_hint 1
+#endif
+
+#ifndef GL_SGIX_fog_scale
+#define GL_SGIX_fog_scale 1
+#endif
+
+#ifndef GL_SUNX_constant_data
+#define GL_SUNX_constant_data 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFinishTextureSUNX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void);
+#endif
+
+#ifndef GL_SUN_global_alpha
+#define GL_SUN_global_alpha 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte);
+GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort);
+GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint);
+GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat);
+GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble);
+GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte);
+GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort);
+GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);
+#endif
+
+#ifndef GL_SUN_triangle_list
+#define GL_SUN_triangle_list 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint);
+GLAPI void APIENTRY glReplacementCodeusSUN (GLushort);
+GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte);
+GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *);
+GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *);
+GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *);
+GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer);
+#endif
+
+#ifndef GL_SUN_vertex
+#define GL_SUN_vertex 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *, const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+#endif
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+
+#ifndef GL_INGR_blend_func_separate
+#define GL_INGR_blend_func_separate 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+
+#ifndef GL_INGR_color_clamp
+#define GL_INGR_color_clamp 1
+#endif
+
+#ifndef GL_INGR_interlace_read
+#define GL_INGR_interlace_read 1
+#endif
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+#endif
+
+#ifndef GL_EXT_422_pixels
+#define GL_EXT_422_pixels 1
+#endif
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+#endif
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_SUN_convolution_border_modes 1
+#endif
+
+#ifndef GL_EXT_texture_env_add
+#define GL_EXT_texture_env_add 1
+#endif
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+#endif
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+#endif
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_EXT_vertex_weighting 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexWeightfEXT (GLfloat);
+GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *);
+GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+#endif
+
+#ifndef GL_NV_vertex_array_range
+#define GL_NV_vertex_array_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushVertexArrayRangeNV (void);
+GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
+typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer);
+#endif
+
+#ifndef GL_NV_register_combiners
+#define GL_NV_register_combiners 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *);
+GLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat);
+GLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *);
+GLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint);
+GLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean);
+GLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_NV_fog_distance
+#define GL_NV_fog_distance 1
+#endif
+
+#ifndef GL_NV_texgen_emboss
+#define GL_NV_texgen_emboss 1
+#endif
+
+#ifndef GL_NV_blend_square
+#define GL_NV_blend_square 1
+#endif
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+#endif
+
+#ifndef GL_MESA_resize_buffers
+#define GL_MESA_resize_buffers 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glResizeBuffersMESA (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void);
+#endif
+
+#ifndef GL_MESA_window_pos
+#define GL_MESA_window_pos 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *);
+GLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *);
+GLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint);
+GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *);
+GLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *);
+GLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *);
+GLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *);
+GLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint);
+GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *);
+GLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *);
+GLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *);
+GLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *);
+GLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *);
+GLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v);
+#endif
+
+#ifndef GL_IBM_cull_vertex
+#define GL_IBM_cull_vertex 1
+#endif
+
+#ifndef GL_IBM_multimode_draw_arrays
+#define GL_IBM_multimode_draw_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *, const GLint *, const GLsizei *, GLsizei, GLint);
+GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* const *, GLsizei, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride);
+#endif
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_IBM_vertex_array_lists 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint);
+GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+#endif
+
+#ifndef GL_SGIX_subsample
+#define GL_SGIX_subsample 1
+#endif
+
+#ifndef GL_SGIX_ycrcba
+#define GL_SGIX_ycrcba 1
+#endif
+
+#ifndef GL_SGIX_ycrcb_subsample
+#define GL_SGIX_ycrcb_subsample 1
+#endif
+
+#ifndef GL_SGIX_depth_pass_instrument
+#define GL_SGIX_depth_pass_instrument 1
+#endif
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_3DFX_texture_compression_FXT1 1
+#endif
+
+#ifndef GL_3DFX_multisample
+#define GL_3DFX_multisample 1
+#endif
+
+#ifndef GL_3DFX_tbuffer
+#define GL_3DFX_tbuffer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTbufferMask3DFX (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);
+#endif
+
+#ifndef GL_EXT_multisample
+#define GL_EXT_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean);
+GLAPI void APIENTRY glSamplePatternEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);
+#endif
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_SGIX_vertex_preclip 1
+#endif
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_SGIX_convolution_accuracy 1
+#endif
+
+#ifndef GL_SGIX_resample
+#define GL_SGIX_resample 1
+#endif
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_SGIS_point_line_texgen 1
+#endif
+
+#ifndef GL_SGIS_texture_color_mask
+#define GL_SGIS_texture_color_mask 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#endif
+
+#ifndef GL_SGIX_igloo_interface
+#define GL_SGIX_igloo_interface 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params);
+#endif
+
+#ifndef GL_EXT_texture_env_dot3
+#define GL_EXT_texture_env_dot3 1
+#endif
+
+#ifndef GL_ATI_texture_mirror_once
+#define GL_ATI_texture_mirror_once 1
+#endif
+
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *);
+GLAPI GLboolean APIENTRY glIsFenceNV (GLuint);
+GLAPI GLboolean APIENTRY glTestFenceNV (GLuint);
+GLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glFinishFenceNV (GLuint);
+GLAPI void APIENTRY glSetFenceNV (GLuint, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
+typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
+#endif
+
+#ifndef GL_NV_evaluators
+#define GL_NV_evaluators 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *);
+GLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *);
+GLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points);
+typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points);
+typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);
+#endif
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_NV_packed_depth_stencil 1
+#endif
+
+#ifndef GL_NV_register_combiners2
+#define GL_NV_register_combiners2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_NV_texture_compression_vtc
+#define GL_NV_texture_compression_vtc 1
+#endif
+
+#ifndef GL_NV_texture_rectangle
+#define GL_NV_texture_rectangle 1
+#endif
+
+#ifndef GL_NV_texture_shader
+#define GL_NV_texture_shader 1
+#endif
+
+#ifndef GL_NV_texture_shader2
+#define GL_NV_texture_shader2 1
+#endif
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_NV_vertex_array_range2 1
+#endif
+
+#ifndef GL_NV_vertex_program
+#define GL_NV_vertex_program 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *);
+GLAPI void APIENTRY glBindProgramNV (GLenum, GLuint);
+GLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *);
+GLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *);
+GLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *);
+GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *);
+GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *);
+GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *);
+GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *);
+GLAPI GLboolean APIENTRY glIsProgramNV (GLuint);
+GLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *);
+GLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *);
+GLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *);
+GLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *);
+GLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *);
+GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *);
+GLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum);
+GLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble);
+GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat);
+GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort);
+GLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte);
+GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *);
+GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);
+typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);
+typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);
+#endif
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_SGIX_texture_coordinate_clamp 1
+#endif
+
+#ifndef GL_SGIX_scalebias_hint
+#define GL_SGIX_scalebias_hint 1
+#endif
+
+#ifndef GL_OML_interlace
+#define GL_OML_interlace 1
+#endif
+
+#ifndef GL_OML_subsample
+#define GL_OML_subsample 1
+#endif
+
+#ifndef GL_OML_resample
+#define GL_OML_resample 1
+#endif
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_NV_copy_depth_to_color 1
+#endif
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_ATI_envmap_bumpmap 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *);
+GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
+#endif
+
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint);
+GLAPI void APIENTRY glBindFragmentShaderATI (GLuint);
+GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint);
+GLAPI void APIENTRY glBeginFragmentShaderATI (void);
+GLAPI void APIENTRY glEndFragmentShaderATI (void);
+GLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum);
+GLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum);
+GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);
+typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value);
+#endif
+
+#ifndef GL_ATI_pn_triangles
+#define GL_ATI_pn_triangles 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint);
+GLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);
+#endif
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_ATI_vertex_array_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum);
+GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint);
+GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum);
+GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glFreeObjectBufferATI (GLuint);
+GLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint);
+GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint);
+GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage);
+typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve);
+typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_EXT_vertex_shader
+#define GL_EXT_vertex_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginVertexShaderEXT (void);
+GLAPI void APIENTRY glEndVertexShaderEXT (void);
+GLAPI void APIENTRY glBindVertexShaderEXT (GLuint);
+GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint);
+GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint);
+GLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint);
+GLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint);
+GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint);
+GLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const GLvoid *);
+GLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const GLvoid *);
+GLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *);
+GLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *);
+GLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *);
+GLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *);
+GLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *);
+GLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *);
+GLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const GLvoid *);
+GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint);
+GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint);
+GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindParameterEXT (GLenum);
+GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum);
+GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *);
+GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *);
+GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *);
+GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *);
+GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);
+typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);
+typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);
+typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
+typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr);
+typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr);
+typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr);
+typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr);
+typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr);
+typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr);
+typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr);
+typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr);
+typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr);
+typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr);
+typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr);
+typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value);
+typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);
+typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+#endif
+
+#ifndef GL_ATI_vertex_streams
+#define GL_ATI_vertex_streams 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort);
+GLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint);
+GLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat);
+GLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble);
+GLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort);
+GLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint);
+GLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *);
+GLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum);
+GLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint);
+GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);
+typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);
+#endif
+
+#ifndef GL_ATI_element_array
+#define GL_ATI_element_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *);
+GLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei);
+GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);
+#endif
+
+#ifndef GL_SUN_mesh_array
+#define GL_SUN_mesh_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width);
+#endif
+
+#ifndef GL_SUN_slice_accum
+#define GL_SUN_slice_accum 1
+#endif
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_NV_multisample_filter_hint 1
+#endif
+
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+#endif
+
+#ifndef GL_NV_occlusion_query
+#define GL_NV_occlusion_query 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *);
+GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *);
+GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint);
+GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint);
+GLAPI void APIENTRY glEndOcclusionQueryNV (void);
+GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void);
+typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);
+#endif
+
+#ifndef GL_NV_point_sprite
+#define GL_NV_point_sprite 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameteriNV (GLenum, GLint);
+GLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_NV_texture_shader3
+#define GL_NV_texture_shader3 1
+#endif
+
+#ifndef GL_NV_vertex_program1_1
+#define GL_NV_vertex_program1_1 1
+#endif
+
+#ifndef GL_EXT_shadow_funcs
+#define GL_EXT_shadow_funcs 1
+#endif
+
+#ifndef GL_EXT_stencil_two_side
+#define GL_EXT_stencil_two_side 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face);
+#endif
+
+#ifndef GL_ATI_text_fragment_shader
+#define GL_ATI_text_fragment_shader 1
+#endif
+
+#ifndef GL_APPLE_client_storage
+#define GL_APPLE_client_storage 1
+#endif
+
+#ifndef GL_APPLE_element_array
+#define GL_APPLE_element_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerAPPLE (GLenum, const GLvoid *);
+GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum, GLint, GLsizei);
+GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, GLint, GLsizei);
+GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum, const GLint *, const GLsizei *, GLsizei);
+GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, const GLint *, const GLsizei *, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
+#endif
+
+#ifndef GL_APPLE_fence
+#define GL_APPLE_fence 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenFencesAPPLE (GLsizei, GLuint *);
+GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei, const GLuint *);
+GLAPI void APIENTRY glSetFenceAPPLE (GLuint);
+GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint);
+GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint);
+GLAPI void APIENTRY glFinishFenceAPPLE (GLuint);
+GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum, GLuint);
+GLAPI void APIENTRY glFinishObjectAPPLE (GLenum, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences);
+typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name);
+typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name);
+#endif
+
+#ifndef GL_APPLE_vertex_array_object
+#define GL_APPLE_vertex_array_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint);
+GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei, GLuint *);
+GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array);
+typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays);
+typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array);
+#endif
+
+#ifndef GL_APPLE_vertex_array_range
+#define GL_APPLE_vertex_array_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei, GLvoid *);
+GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei, GLvoid *);
+GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer);
+typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer);
+typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param);
+#endif
+
+#ifndef GL_APPLE_ycbcr_422
+#define GL_APPLE_ycbcr_422 1
+#endif
+
+#ifndef GL_S3_s3tc
+#define GL_S3_s3tc 1
+#endif
+
+#ifndef GL_ATI_draw_buffers
+#define GL_ATI_draw_buffers 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawBuffersATI (GLsizei, const GLenum *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs);
+#endif
+
+#ifndef GL_ATI_pixel_format_float
+#define GL_ATI_pixel_format_float 1
+/* This is really a WGL extension, but defines some associated GL enums.
+ * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string.
+ */
+#endif
+
+#ifndef GL_ATI_texture_env_combine3
+#define GL_ATI_texture_env_combine3 1
+#endif
+
+#ifndef GL_ATI_texture_float
+#define GL_ATI_texture_float 1
+#endif
+
+#ifndef GL_NV_float_buffer
+#define GL_NV_float_buffer 1
+#endif
+
+#ifndef GL_NV_fragment_program
+#define GL_NV_fragment_program 1
+/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint, GLsizei, const GLubyte *, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint, GLsizei, const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint, GLsizei, const GLubyte *, const GLdouble *);
+GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint, GLsizei, const GLubyte *, GLfloat *);
+GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint, GLsizei, const GLubyte *, GLdouble *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);
+typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
+#endif
+
+#ifndef GL_NV_half_float
+#define GL_NV_half_float 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertex2hNV (GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *);
+GLAPI void APIENTRY glVertex3hNV (GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *);
+GLAPI void APIENTRY glVertex4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *);
+GLAPI void APIENTRY glNormal3hNV (GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *);
+GLAPI void APIENTRY glColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *);
+GLAPI void APIENTRY glColor4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *);
+GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV);
+GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *);
+GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *);
+GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *);
+GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *);
+GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum, GLhalfNV);
+GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum, const GLhalfNV *);
+GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum, const GLhalfNV *);
+GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum, const GLhalfNV *);
+GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum, const GLhalfNV *);
+GLAPI void APIENTRY glFogCoordhNV (GLhalfNV);
+GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *);
+GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *);
+GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV);
+GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *);
+GLAPI void APIENTRY glVertexAttrib1hNV (GLuint, GLhalfNV);
+GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint, const GLhalfNV *);
+GLAPI void APIENTRY glVertexAttrib2hNV (GLuint, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint, const GLhalfNV *);
+GLAPI void APIENTRY glVertexAttrib3hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint, const GLhalfNV *);
+GLAPI void APIENTRY glVertexAttrib4hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
+GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint, const GLhalfNV *);
+GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint, GLsizei, const GLhalfNV *);
+GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint, GLsizei, const GLhalfNV *);
+GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint, GLsizei, const GLhalfNV *);
+GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint, GLsizei, const GLhalfNV *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y);
+typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s);
+typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t);
+typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog);
+typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+#endif
+
+#ifndef GL_NV_pixel_data_range
+#define GL_NV_pixel_data_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelDataRangeNV (GLenum, GLsizei, GLvoid *);
+GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer);
+typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target);
+#endif
+
+#ifndef GL_NV_primitive_restart
+#define GL_NV_primitive_restart 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPrimitiveRestartNV (void);
+GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void);
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index);
+#endif
+
+#ifndef GL_NV_texture_expand_normal
+#define GL_NV_texture_expand_normal 1
+#endif
+
+#ifndef GL_NV_vertex_program2
+#define GL_NV_vertex_program2 1
+#endif
+
+#ifndef GL_ATI_map_object_buffer
+#define GL_ATI_map_object_buffer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint);
+GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+#endif
+
+#ifndef GL_ATI_separate_stencil
+#define GL_ATI_separate_stencil 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilOpSeparateATI (GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum, GLenum, GLint, GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+#endif
+
+#ifndef GL_ATI_vertex_attrib_array_object
+#define GL_ATI_vertex_attrib_array_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint);
+GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint, GLenum, GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_OES_read_format
+#define GL_OES_read_format 1
+#endif
+
+#ifndef GL_EXT_depth_bounds_test
+#define GL_EXT_depth_bounds_test 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthBoundsEXT (GLclampd, GLclampd);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax);
+#endif
+
+#ifndef GL_EXT_texture_mirror_clamp
+#define GL_EXT_texture_mirror_clamp 1
+#endif
+
+#ifndef GL_EXT_blend_equation_separate
+#define GL_EXT_blend_equation_separate 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha);
+#endif
+
+#ifndef GL_MESA_pack_invert
+#define GL_MESA_pack_invert 1
+#endif
+
+#ifndef GL_MESA_ycbcr_texture
+#define GL_MESA_ycbcr_texture 1
+#endif
+
+#ifndef GL_EXT_pixel_buffer_object
+#define GL_EXT_pixel_buffer_object 1
+#endif
+
+#ifndef GL_NV_fragment_program_option
+#define GL_NV_fragment_program_option 1
+#endif
+
+#ifndef GL_NV_fragment_program2
+#define GL_NV_fragment_program2 1
+#endif
+
+#ifndef GL_NV_vertex_program2_option
+#define GL_NV_vertex_program2_option 1
+#endif
+
+#ifndef GL_NV_vertex_program3
+#define GL_NV_vertex_program3 1
+#endif
+
+#ifndef GL_EXT_framebuffer_object
+#define GL_EXT_framebuffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint);
+GLAPI void APIENTRY glBindRenderbufferEXT (GLenum, GLuint);
+GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei, GLuint *);
+GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum, GLenum, GLsizei, GLsizei);
+GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint);
+GLAPI void APIENTRY glBindFramebufferEXT (GLenum, GLuint);
+GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *);
+GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum);
+GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum, GLenum, GLenum, GLuint, GLint);
+GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum, GLenum, GLenum, GLuint, GLint);
+GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLint);
+GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum, GLenum, GLenum, GLuint);
+GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum, GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGenerateMipmapEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer);
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer);
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers);
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target);
+#endif
+
+#ifndef GL_GREMEDY_string_marker
+#define GL_GREMEDY_string_marker 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string);
+#endif
+
+#ifndef GL_EXT_packed_depth_stencil
+#define GL_EXT_packed_depth_stencil 1
+#endif
+
+#ifndef GL_EXT_stencil_clear_tag
+#define GL_EXT_stencil_clear_tag 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilClearTagEXT (GLsizei, GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag);
+#endif
+
+#ifndef GL_EXT_texture_sRGB
+#define GL_EXT_texture_sRGB 1
+#endif
+
+#ifndef GL_EXT_framebuffer_blit
+#define GL_EXT_framebuffer_blit 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlitFramebufferEXT (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+
+#ifndef GL_EXT_framebuffer_multisample
+#define GL_EXT_framebuffer_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_MESAX_texture_stack
+#define GL_MESAX_texture_stack 1
+#endif
+
+#ifndef GL_EXT_timer_query
+#define GL_EXT_timer_query 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint, GLenum, GLint64EXT *);
+GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint, GLenum, GLuint64EXT *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params);
+#endif
+
+#ifndef GL_EXT_gpu_program_parameters
+#define GL_EXT_gpu_program_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+#endif
+
+#ifndef GL_APPLE_flush_buffer_range
+#define GL_APPLE_flush_buffer_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum, GLintptr, GLsizeiptr);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size);
+#endif
+
+#ifndef GL_NV_gpu_program4
+#define GL_NV_gpu_program4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum, GLuint, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum, GLuint, const GLint *);
+GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum, GLuint, GLsizei, const GLint *);
+GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum, GLuint, const GLuint *);
+GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum, GLuint, GLsizei, const GLuint *);
+GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum, GLuint, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum, GLuint, const GLint *);
+GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum, GLuint, GLsizei, const GLint *);
+GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum, GLuint, const GLuint *);
+GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum, GLuint, GLsizei, const GLuint *);
+GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum, GLuint, GLint *);
+GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum, GLuint, GLuint *);
+GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum, GLuint, GLint *);
+GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum, GLuint, GLuint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
+#endif
+
+#ifndef GL_NV_geometry_program4
+#define GL_NV_geometry_program4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramVertexLimitNV (GLenum, GLint);
+GLAPI void APIENTRY glFramebufferTextureEXT (GLenum, GLenum, GLuint, GLint);
+GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum, GLenum, GLuint, GLint, GLint);
+GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum, GLenum, GLuint, GLint, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif
+
+#ifndef GL_EXT_geometry_shader4
+#define GL_EXT_geometry_shader4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramParameteriEXT (GLuint, GLenum, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value);
+#endif
+
+#ifndef GL_NV_vertex_program4
+#define GL_NV_vertex_program4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint, GLint);
+GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint, GLint, GLint);
+GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint, GLint, GLint, GLint);
+GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint, GLuint);
+GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint, const GLint *);
+GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint, const GLint *);
+GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint, const GLint *);
+GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint, const GLint *);
+GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint, const GLuint *);
+GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint, const GLuint *);
+GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint, const GLuint *);
+GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint, const GLuint *);
+GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint, const GLbyte *);
+GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint, const GLubyte *);
+GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint, const GLushort *);
+GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint, GLint, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint, GLenum, GLuint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params);
+#endif
+
+#ifndef GL_EXT_gpu_shader4
+#define GL_EXT_gpu_shader4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetUniformuivEXT (GLuint, GLint, GLuint *);
+GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint, GLuint, const GLchar *);
+GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint, const GLchar *);
+GLAPI void APIENTRY glUniform1uiEXT (GLint, GLuint);
+GLAPI void APIENTRY glUniform2uiEXT (GLint, GLuint, GLuint);
+GLAPI void APIENTRY glUniform3uiEXT (GLint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glUniform4uiEXT (GLint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glUniform1uivEXT (GLint, GLsizei, const GLuint *);
+GLAPI void APIENTRY glUniform2uivEXT (GLint, GLsizei, const GLuint *);
+GLAPI void APIENTRY glUniform3uivEXT (GLint, GLsizei, const GLuint *);
+GLAPI void APIENTRY glUniform4uivEXT (GLint, GLsizei, const GLuint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+#endif
+
+#ifndef GL_EXT_draw_instanced
+#define GL_EXT_draw_instanced 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum, GLint, GLsizei, GLsizei);
+GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum, GLsizei, GLenum, const GLvoid *, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);
+#endif
+
+#ifndef GL_EXT_packed_float
+#define GL_EXT_packed_float 1
+#endif
+
+#ifndef GL_EXT_texture_array
+#define GL_EXT_texture_array 1
+#endif
+
+#ifndef GL_EXT_texture_buffer_object
+#define GL_EXT_texture_buffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBufferEXT (GLenum, GLenum, GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+#endif
+
+#ifndef GL_EXT_texture_compression_latc
+#define GL_EXT_texture_compression_latc 1
+#endif
+
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_EXT_texture_compression_rgtc 1
+#endif
+
+#ifndef GL_EXT_texture_shared_exponent
+#define GL_EXT_texture_shared_exponent 1
+#endif
+
+#ifndef GL_NV_depth_buffer_float
+#define GL_NV_depth_buffer_float 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthRangedNV (GLdouble, GLdouble);
+GLAPI void APIENTRY glClearDepthdNV (GLdouble);
+GLAPI void APIENTRY glDepthBoundsdNV (GLdouble, GLdouble);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth);
+typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax);
+#endif
+
+#ifndef GL_NV_fragment_program4
+#define GL_NV_fragment_program4 1
+#endif
+
+#ifndef GL_NV_framebuffer_multisample_coverage
+#define GL_NV_framebuffer_multisample_coverage 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum, GLsizei, GLsizei, GLenum, GLsizei, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_EXT_framebuffer_sRGB
+#define GL_EXT_framebuffer_sRGB 1
+#endif
+
+#ifndef GL_NV_geometry_shader4
+#define GL_NV_geometry_shader4 1
+#endif
+
+#ifndef GL_NV_parameter_buffer_object
+#define GL_NV_parameter_buffer_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum, GLuint, GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum, GLuint, GLuint, GLsizei, const GLint *);
+GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum, GLuint, GLuint, GLsizei, const GLuint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params);
+#endif
+
+#ifndef GL_EXT_draw_buffers2
+#define GL_EXT_draw_buffers2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint, GLboolean, GLboolean, GLboolean, GLboolean);
+GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum, GLuint, GLboolean *);
+GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum, GLuint, GLint *);
+GLAPI void APIENTRY glEnableIndexedEXT (GLenum, GLuint);
+GLAPI void APIENTRY glDisableIndexedEXT (GLenum, GLuint);
+GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum, GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index);
+#endif
+
+#ifndef GL_NV_transform_feedback
+#define GL_NV_transform_feedback 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum);
+GLAPI void APIENTRY glEndTransformFeedbackNV (void);
+GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint, const GLint *, GLenum);
+GLAPI void APIENTRY glBindBufferRangeNV (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr);
+GLAPI void APIENTRY glBindBufferOffsetNV (GLenum, GLuint, GLuint, GLintptr);
+GLAPI void APIENTRY glBindBufferBaseNV (GLenum, GLuint, GLuint);
+GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint, GLsizei, const GLint *, GLenum);
+GLAPI void APIENTRY glActiveVaryingNV (GLuint, const GLchar *);
+GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint, const GLchar *);
+GLAPI void APIENTRY glGetActiveVaryingNV (GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *);
+GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint, GLuint, GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location);
+#endif
+
+#ifndef GL_EXT_bindable_uniform
+#define GL_EXT_bindable_uniform 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniformBufferEXT (GLuint, GLint, GLuint);
+GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint, GLint);
+GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location);
+typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location);
+#endif
+
+#ifndef GL_EXT_texture_integer
+#define GL_EXT_texture_integer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexParameterIivEXT (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glTexParameterIuivEXT (GLenum, GLenum, const GLuint *);
+GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum, GLenum, GLuint *);
+GLAPI void APIENTRY glClearColorIiEXT (GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glClearColorIuiEXT (GLuint, GLuint, GLuint, GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha);
+typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+#endif
+
+#ifndef GL_GREMEDY_frame_terminator
+#define GL_GREMEDY_frame_terminator 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameTerminatorGREMEDY (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void);
+#endif
+
+#ifndef GL_NV_conditional_render
+#define GL_NV_conditional_render 1
+#endif
+
+#ifndef GL_NV_present_video
+#define GL_NV_present_video 1
+#endif
+
+#ifndef GL_EXT_transform_feedback
+#define GL_EXT_transform_feedback 1
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: /trunk/src/VBox/GuestHost/OpenGL/include/chromium.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/chromium.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/chromium.h	(revision 86648)
@@ -0,0 +1,871 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+/**
+ * Public Chromium exports.
+ * Parallel Chromium applications will include this header.
+ */
+
+
+#ifndef __CHROMIUM_H__
+#define __CHROMIUM_H__
+
+
+/**********************************************************************/
+/*****             System includes and other cruft                *****/
+/**********************************************************************/
+
+#include "cr_compiler.h"
+
+#ifdef IN_RING0
+
+# ifndef GA_INCLUDED_SRC_WINNT_Graphics_Video_common_VBoxVideoLog_h
+#  undef WARN     /* VBoxMpUtils.h includes common/VBoxVideoLog.h which */
+#  undef LOG      /* uncondtionally redefines these three macros. */
+#  undef LOGREL
+# endif
+# include <common/VBoxMPUtils.h>
+
+# define WINGDIAPI /* gl/gl.h is using this (wingdi.h defines it a __declspec(dllimport) normaly).  */
+
+#endif
+
+/*
+ * We effectively wrap gl.h, glu.h, etc, just like GLUT
+ */
+
+#ifndef GL_GLEXT_PROTOTYPES
+# define GL_GLEXT_PROTOTYPES
+#endif
+
+#if defined(WINDOWS)
+# ifdef IN_RING0
+#  error "should not happen!" /* bird: This is certifiably insane, in my opinion. */
+# endif
+# define WIN32_LEAN_AND_MEAN
+# define WGL_APIENTRY __stdcall
+# ifdef VBOX
+#  include <iprt/win/windows.h>
+# else
+#  include <windows.h>
+# endif
+#elif defined(DARWIN)
+/* nothing */
+#else
+# ifndef IN_RING0
+#  define GLX
+# endif
+#endif
+
+#include <GL/gl.h>
+/* Quick fix so as not to update the version of glext.h we provide. */
+#ifdef GL_GLEXT_PROTOTYPES
+# if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS)
+GLAPI void APIENTRY glBindFramebuffer (GLenum, GLuint);
+GLAPI void APIENTRY glBlitFramebuffer (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
+GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum);
+GLAPI void APIENTRY glDeleteFramebuffers (GLsizei, const GLuint *);
+GLAPI void APIENTRY glFramebufferTexture2D (GLenum, GLenum, GLenum, GLuint, GLint);
+GLAPI void APIENTRY glGenFramebuffers (GLsizei, GLuint *);
+# endif
+#endif
+
+#ifndef WINDOWS
+# ifndef RT_OS_WINDOWS /* If we don't need it in ring-3, we probably not need it in ring-0 either (triggers warnings). */
+#  include <iprt/cdefs.h>
+#  if RT_GNUC_PREREQ(4, 6)
+#   pragma GCC diagnostic push
+#  endif
+#  if RT_GNUC_PREREQ(4, 2)
+#   ifndef __cplusplus
+#    pragma GCC diagnostic ignored "-Wstrict-prototypes"
+#   endif
+#  endif
+#  include <GL/glu.h>
+#  if RT_GNUC_PREREQ(4, 6)
+#   pragma GCC diagnostic pop
+#  endif
+# endif /* !RT_OS_WINDOWS */
+#endif
+
+
+#ifdef GLX
+# ifndef GLX_GLXEXT_PROTOTYPES
+#  define GLX_GLXEXT_PROTOTYPES
+# endif
+# include <GL/glx.h>
+#endif
+
+#ifdef USE_OSMESA
+# include <GL/osmesa.h>
+#endif
+
+#ifdef DARWIN
+# include <stddef.h>
+#elif !defined(FreeBSD)
+#  include <malloc.h>  /* to get ptrdiff_t used below */
+#endif
+
+#include "cr_glext.h"
+
+#ifdef IN_RING0
+# undef WINGDIAPI /* don't want it clashing with wingdi.h should it be included. */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* to shut up gcc warning for struct VBOXUHGSMI * parameters */
+struct VBOXUHGSMI;
+struct VBOXVR_SCR_COMPOSITOR;
+struct VBOXVR_SCR_COMPOSITOR_ENTRY;
+
+#define CR_RENDER_DEFAULT_CONTEXT_ID (INT32_MAX-1)
+#define CR_RENDER_DEFAULT_WINDOW_ID (INT32_MAX-1)
+
+#if defined(IN_GUEST) && defined(RT_OS_WINDOWS) && defined(VBOX_WITH_WDDM)
+# ifdef VBOX_WDDM_WOW64
+#  define VBOX_MODNAME_DISPD3D "VBoxDispD3D-x86"
+# else
+#  define VBOX_MODNAME_DISPD3D "VBoxDispD3D"
+# endif
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+
+/** For the pointer hack, bugref:9407. */
+#ifdef IN_GUEST
+# define CRVBOX_HOST_ONLY_PARAM(a_Stuff)
+#else
+# define CRVBOX_HOST_ONLY_PARAM(a_Stuff)    , a_Stuff
+#endif
+
+
+/**********************************************************************/
+/*****     Define things that might have been missing in gl.h     *****/
+/**********************************************************************/
+
+/* 
+ * Define missing GLX tokens:
+ */
+
+#ifndef GLX_SAMPLE_BUFFERS_SGIS
+#define GLX_SAMPLE_BUFFERS_SGIS    0x186a0 /*100000*/
+#endif
+#ifndef GLX_SAMPLES_SGIS
+#define GLX_SAMPLES_SGIS           0x186a1 /*100001*/
+#endif
+#ifndef GLX_VISUAL_CAVEAT_EXT
+#define GLX_VISUAL_CAVEAT_EXT       0x20  /* visual_rating extension type */
+#endif
+
+/*
+ * Define missing WGL tokens:
+ */
+#ifndef WGL_COLOR_BITS_EXT
+#define WGL_COLOR_BITS_EXT          0x2014
+#endif
+#ifndef WGL_DRAW_TO_WINDOW_EXT
+#define WGL_DRAW_TO_WINDOW_EXT          0x2001
+#endif
+#ifndef WGL_FULL_ACCELERATION_EXT
+#define WGL_FULL_ACCELERATION_EXT       0x2027
+#endif
+#ifndef WGL_ACCELERATION_EXT
+#define WGL_ACCELERATION_EXT            0x2003
+#endif
+#ifndef WGL_TYPE_RGBA_EXT
+#define WGL_TYPE_RGBA_EXT           0x202B
+#endif
+#ifndef WGL_RED_BITS_EXT
+#define WGL_RED_BITS_EXT            0x2015
+#endif
+#ifndef WGL_GREEN_BITS_EXT
+#define WGL_GREEN_BITS_EXT          0x2017
+#endif
+#ifndef WGL_BLUE_BITS_EXT
+#define WGL_BLUE_BITS_EXT           0x2019
+#endif
+#ifndef WGL_ALPHA_BITS_EXT
+#define WGL_ALPHA_BITS_EXT          0x201B
+#endif
+#ifndef WGL_DOUBLE_BUFFER_EXT
+#define WGL_DOUBLE_BUFFER_EXT           0x2011
+#endif
+#ifndef WGL_STEREO_EXT
+#define WGL_STEREO_EXT              0x2012
+#endif
+#ifndef WGL_ACCUM_RED_BITS_EXT
+#define WGL_ACCUM_RED_BITS_EXT          0x201E
+#endif
+#ifndef WGL_ACCUM_GREEN_BITS_EXT
+#define WGL_ACCUM_GREEN_BITS_EXT        0x201F
+#endif
+#ifndef WGL_ACCUM_BLUE_BITS_EXT
+#define WGL_ACCUM_BLUE_BITS_EXT         0x2020
+#endif
+#ifndef WGL_ACCUM_ALPHA_BITS_EXT
+#define WGL_ACCUM_ALPHA_BITS_EXT        0x2021
+#endif
+#ifndef WGL_DEPTH_BITS_EXT
+#define WGL_DEPTH_BITS_EXT              0x2022
+#endif
+#ifndef WGL_STENCIL_BITS_EXT
+#define WGL_STENCIL_BITS_EXT            0x2023
+#endif
+#ifndef WGL_SAMPLE_BUFFERS_EXT
+#define WGL_SAMPLE_BUFFERS_EXT          0x2041
+#endif
+#ifndef WGL_SAMPLES_EXT
+#define WGL_SAMPLES_EXT                 0x2042
+#endif
+#ifndef WGL_SUPPORT_OPENGL_ARB
+#define WGL_SUPPORT_OPENGL_ARB          0x2010
+#endif
+#ifndef WGL_NUMBER_PIXEL_FORMATS_ARB
+#define WGL_NUMBER_PIXEL_FORMATS_ARB    0x2000
+#endif
+#ifndef WGL_FULL_ACCELERATION_ARB
+#define WGL_FULL_ACCELERATION_ARB       0x2027
+#endif
+#ifndef WGL_SWAP_UNDEFINED_ARB
+#define WGL_SWAP_UNDEFINED_ARB          0x202A
+#endif
+#ifndef WGL_TYPE_RGBA_ARB
+#define WGL_TYPE_RGBA_ARB               0x202B
+#endif
+#ifndef WGL_DRAW_TO_WINDOW_ARB
+#define WGL_DRAW_TO_WINDOW_ARB                  0x2001
+#endif
+#ifndef WGL_DRAW_TO_BITMAP_ARB
+#define WGL_DRAW_TO_BITMAP_ARB                  0x2002
+#endif
+#ifndef WGL_DOUBLE_BUFFER_ARB
+#define WGL_DOUBLE_BUFFER_ARB                   0x2011
+#endif
+#ifndef WGL_NEED_PALETTE_ARB
+#define WGL_NEED_PALETTE_ARB                    0x2004
+#endif
+#ifndef WGL_NEED_SYSTEM_PALETTE_ARB
+#define WGL_NEED_SYSTEM_PALETTE_ARB             0x2005
+#endif
+#ifndef WGL_SWAP_LAYER_BUFFERS_ARB
+#define WGL_SWAP_LAYER_BUFFERS_ARB              0x2006
+#endif
+#ifndef WGL_NUMBER_OVERLAYS_ARB
+#define WGL_NUMBER_OVERLAYS_ARB                 0x2008
+#endif
+#ifndef WGL_NUMBER_UNDERLAYS_ARB
+#define WGL_NUMBER_UNDERLAYS_ARB                0x2009
+#endif
+#ifndef WGL_TRANSPARENT_ARB
+#define WGL_TRANSPARENT_ARB                     0x200A
+#endif
+#ifndef WGL_TRANSPARENT_RED_VALUE_ARB
+#define WGL_TRANSPARENT_RED_VALUE_ARB           0x2037
+#endif
+#ifndef WGL_TRANSPARENT_GREEN_VALUE_ARB
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB         0x2038
+#endif
+#ifndef WGL_TRANSPARENT_BLUE_VALUE_ARB
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB          0x2039
+#endif
+#ifndef WGL_TRANSPARENT_ALPHA_VALUE_ARB
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB         0x203A
+#endif
+#ifndef WGL_TRANSPARENT_INDEX_VALUE_ARB
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB         0x203B
+#endif
+#ifndef WGL_SHARE_STENCIL_ARB
+#define WGL_SHARE_STENCIL_ARB                   0x200D
+#endif
+#ifndef WGL_SHARE_ACCUM_ARB                    
+#define WGL_SHARE_ACCUM_ARB                     0x200E
+#endif
+#ifndef WGL_SUPPORT_GDI_ARB                    
+#define WGL_SUPPORT_GDI_ARB                     0x200F
+#endif
+#ifndef WGL_RED_BITS_ARB                       
+#define WGL_RED_BITS_ARB                        0x2015
+#endif
+#ifndef WGL_RED_SHIFT_ARB                      
+#define WGL_RED_SHIFT_ARB                       0x2016
+#endif
+#ifndef WGL_GREEN_BITS_ARB                     
+#define WGL_GREEN_BITS_ARB                      0x2017
+#endif
+#ifndef WGL_GREEN_SHIFT_ARB                    
+#define WGL_GREEN_SHIFT_ARB                     0x2018
+#endif
+#ifndef WGL_BLUE_BITS_ARB                      
+#define WGL_BLUE_BITS_ARB                       0x2019
+#endif
+#ifndef WGL_BLUE_SHIFT_ARB                     
+#define WGL_BLUE_SHIFT_ARB                      0x201A
+#endif
+#ifndef WGL_ALPHA_BITS_ARB                     
+#define WGL_ALPHA_BITS_ARB                      0x201B
+#endif
+#ifndef WGL_ALPHA_SHIFT_ARB                    
+#define WGL_ALPHA_SHIFT_ARB                     0x201C
+#endif
+#ifndef WGL_ACCUM_BITS_ARB                     
+#define WGL_ACCUM_BITS_ARB                      0x201D
+#endif
+#ifndef WGL_ACCUM_RED_BITS_ARB                 
+#define WGL_ACCUM_RED_BITS_ARB                  0x201E
+#endif
+#ifndef WGL_ACCUM_GREEN_BITS_ARB               
+#define WGL_ACCUM_GREEN_BITS_ARB                0x201F
+#endif
+#ifndef WGL_ACCUM_BLUE_BITS_ARB                
+#define WGL_ACCUM_BLUE_BITS_ARB                 0x2020
+#endif
+#ifndef WGL_ACCUM_ALPHA_BITS_ARB               
+#define WGL_ACCUM_ALPHA_BITS_ARB                0x2021
+#endif
+#ifndef WGL_DEPTH_BITS_ARB                     
+#define WGL_DEPTH_BITS_ARB                      0x2022
+#endif
+#ifndef WGL_STENCIL_BITS_ARB                   
+#define WGL_STENCIL_BITS_ARB                    0x2023
+#endif
+#ifndef WGL_AUX_BUFFERS_ARB                    
+#define WGL_AUX_BUFFERS_ARB                     0x2024
+#endif
+#ifndef WGL_STEREO_ARB                         
+#define WGL_STEREO_ARB                          0x2012
+#endif
+#ifndef WGL_ACCELERATION_ARB                   
+#define WGL_ACCELERATION_ARB                    0x2003
+#endif
+#ifndef WGL_SHARE_DEPTH_ARB                    
+#define WGL_SHARE_DEPTH_ARB                     0x200C
+#endif
+#ifndef WGL_PIXEL_TYPE_ARB                     
+#define WGL_PIXEL_TYPE_ARB                      0x2013
+#endif
+#ifndef WGL_COLOR_BITS_ARB                     
+#define WGL_COLOR_BITS_ARB                      0x2014
+#endif
+#ifndef WGL_SWAP_METHOD_ARB                    
+#define WGL_SWAP_METHOD_ARB                     0x2007
+#endif
+
+/*
+ * Define missing 1.2 tokens:
+ */
+#ifndef GL_SMOOTH_POINT_SIZE_RANGE
+#define GL_SMOOTH_POINT_SIZE_RANGE      0x0B12
+#endif
+
+#ifndef GL_SMOOTH_POINT_SIZE_GRANULARITY
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY    0x0B13
+#endif
+
+#ifndef GL_SMOOTH_LINE_WIDTH_RANGE
+#define GL_SMOOTH_LINE_WIDTH_RANGE      0x0B22
+#endif
+
+#ifndef GL_SMOOTH_LINE_WIDTH_GRANULARITY
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY    0x0B23
+#endif
+
+#ifndef GL_ALIASED_POINT_SIZE_RANGE
+#define GL_ALIASED_POINT_SIZE_RANGE     0x846D
+#endif
+
+#ifndef GL_ALIASED_LINE_WIDTH_RANGE
+#define GL_ALIASED_LINE_WIDTH_RANGE     0x846E
+#endif
+
+#ifndef GL_COLOR_MATRIX_STACK_DEPTH
+#define GL_COLOR_MATRIX_STACK_DEPTH     0x80B2
+#endif
+
+#ifndef GL_COLOR_MATRIX
+#define GL_COLOR_MATRIX             0x80B1
+#endif
+
+#ifndef GL_TEXTURE_3D
+#define GL_TEXTURE_3D               0x806F
+#endif
+
+#ifndef GL_MAX_3D_TEXTURE_SIZE
+#define GL_MAX_3D_TEXTURE_SIZE          0x8073
+#endif
+
+#ifndef GL_PACK_SKIP_IMAGES
+#define GL_PACK_SKIP_IMAGES         0x806B
+#endif
+
+#ifndef GL_PACK_IMAGE_HEIGHT
+#define GL_PACK_IMAGE_HEIGHT            0x806C
+#endif
+
+#ifndef GL_UNPACK_SKIP_IMAGES
+#define GL_UNPACK_SKIP_IMAGES           0x806D
+#endif
+
+#ifndef GL_UNPACK_IMAGE_HEIGHT
+#define GL_UNPACK_IMAGE_HEIGHT          0x806E
+#endif
+
+#ifndef GL_PROXY_TEXTURE_3D
+#define GL_PROXY_TEXTURE_3D         0x8070
+#endif
+
+#ifndef GL_TEXTURE_DEPTH
+#define GL_TEXTURE_DEPTH            0x8071
+#endif
+
+#ifndef GL_TEXTURE_WRAP_R
+#define GL_TEXTURE_WRAP_R           0x8072
+#endif
+
+#ifndef GL_TEXTURE_BINDING_3D
+#define GL_TEXTURE_BINDING_3D           0x806A
+#endif
+
+#ifndef GL_MAX_ELEMENTS_VERTICES
+#define GL_MAX_ELEMENTS_VERTICES        0x80E8
+#endif
+
+#ifndef GL_MAX_ELEMENTS_INDICES
+#define GL_MAX_ELEMENTS_INDICES         0x80E9
+#endif
+
+
+/*
+ * Define missing ARB_imaging tokens
+ */
+
+#ifndef GL_BLEND_EQUATION
+#define GL_BLEND_EQUATION           0x8009
+#endif
+
+#ifndef GL_MIN
+#define GL_MIN                  0x8007
+#endif
+
+#ifndef GL_MAX
+#define GL_MAX                  0x8008
+#endif
+
+#ifndef GL_FUNC_ADD
+#define GL_FUNC_ADD             0x8006
+#endif
+
+#ifndef GL_FUNC_SUBTRACT
+#define GL_FUNC_SUBTRACT            0x800A
+#endif
+
+#ifndef GL_FUNC_REVERSE_SUBTRACT
+#define GL_FUNC_REVERSE_SUBTRACT        0x800B
+#endif
+
+#ifndef GL_BLEND_COLOR
+#define GL_BLEND_COLOR              0x8005
+#endif
+
+#ifndef GL_PER_STAGE_CONSTANTS_NV
+#define GL_PER_STAGE_CONSTANTS_NV       0x8535
+#endif
+
+#ifndef GL_FOG_COORDINATE_ARRAY_POINTER_EXT
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT     0x8456
+#endif
+
+typedef void (*CR_GLXFuncPtr)(void);
+#ifndef GLX_ARB_get_proc_address
+#define GLX_ARB_get_proc_address 1
+CR_GLXFuncPtr glXGetProcAddressARB( const GLubyte *name );
+#endif /* GLX_ARB_get_proc_address */
+
+#ifndef GLX_VERSION_1_4
+CR_GLXFuncPtr glXGetProcAddress( const GLubyte *name );
+#endif /* GLX_ARB_get_proc_address */
+
+#ifndef GL_RASTER_POSITION_UNCLIPPED_IBM
+#define GL_RASTER_POSITION_UNCLIPPED_IBM  0x19262
+#endif
+
+#ifdef WINDOWS
+/* XXX how about this prototype for wglGetProcAddress()?
+PROC WINAPI wglGetProcAddress_prox( LPCSTR name )
+*/
+#endif
+
+
+#ifndef GL_VERSION_1_5
+
+typedef ptrdiff_t GLintptr;
+typedef ptrdiff_t GLsizeiptr;
+
+/* prototype these functions for opengl_stub/getprocaddress.c */
+extern void APIENTRY glGenQueries(GLsizei n, GLuint *ids);
+extern void APIENTRY glDeleteQueries(GLsizei n, const GLuint *ids);
+extern GLboolean APIENTRY glIsQuery(GLuint id);
+extern void APIENTRY glBeginQuery(GLenum target, GLuint id);
+extern void APIENTRY glEndQuery(GLenum target);
+extern void APIENTRY glGetQueryiv(GLenum target, GLenum pname, GLint *params);
+extern void APIENTRY glGetQueryObjectiv(GLuint id, GLenum pname, GLint *params);
+extern void APIENTRY glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
+extern void APIENTRY glBindBuffer(GLenum, GLuint);
+extern void APIENTRY glDeleteBuffers(GLsizei, const GLuint *);
+extern void APIENTRY glGenBuffers(GLsizei, GLuint *);
+extern GLboolean APIENTRY glIsBuffer(GLuint);
+extern void APIENTRY glBufferData(GLenum, GLsizeiptr, const GLvoid *, GLenum);
+extern void APIENTRY glBufferSubData(GLenum, GLintptr, GLsizeiptr, const GLvoid *);
+extern void APIENTRY glGetBufferSubData(GLenum, GLintptr, GLsizeiptr, GLvoid *);
+extern GLvoid* APIENTRY glMapBuffer(GLenum, GLenum);
+extern GLboolean APIENTRY glUnmapBuffer(GLenum);
+extern void APIENTRY glGetBufferParameteriv(GLenum, GLenum, GLint *);
+extern void APIENTRY glGetBufferPointerv(GLenum, GLenum, GLvoid* *);
+
+#endif
+
+
+/**********************************************************************/
+/*****            Chromium Extensions to OpenGL                   *****/
+/*****                                                            *****/
+/***** Chromium owns the OpenGL enum range 0x8AF0-0x8B2F          *****/
+/**********************************************************************/
+
+#ifndef GL_CR_synchronization
+#define GL_CR_synchronization 1
+
+typedef void (APIENTRY *glBarrierCreateCRProc) (GLuint name, GLuint count);
+typedef void (APIENTRY *glBarrierDestroyCRProc) (GLuint name);
+typedef void (APIENTRY *glBarrierExecCRProc) (GLuint name);
+typedef void (APIENTRY *glSemaphoreCreateCRProc) (GLuint name, GLuint count);
+typedef void (APIENTRY *glSemaphoreDestroyCRProc) (GLuint name);
+typedef void (APIENTRY *glSemaphorePCRProc) (GLuint name);
+typedef void (APIENTRY *glSemaphoreVCRProc) (GLuint name);
+
+extern void APIENTRY glBarrierCreateCR(GLuint name, GLuint count);
+extern void APIENTRY glBarrierDestroyCR(GLuint name);
+extern void APIENTRY glBarrierExecCR(GLuint name);
+extern void APIENTRY glSemaphoreCreateCR(GLuint name, GLuint count);
+extern void APIENTRY glSemaphoreDestroyCR(GLuint name);
+extern void APIENTRY glSemaphorePCR(GLuint name);
+extern void APIENTRY glSemaphoreVCR(GLuint name);
+
+#endif /* GL_CR_synchronization */
+
+
+#ifndef GL_CR_bounds_info
+#define GL_CR_bounds_info 1
+/* Private, internal Chromium function */
+/*
+typedef void (APIENTRY *glBoundsInfoCRProc)(const CRrecti *, const GLbyte *, GLint, GLint);
+*/
+#endif /* GL_CR_bounds_info */
+
+
+#ifndef GL_CR_state_parameter
+#define GL_CR_state_parameter 1
+
+typedef void (APIENTRY *glChromiumParameteriCRProc) (GLenum target, GLint value);
+typedef void (APIENTRY *glChromiumParameterfCRProc) (GLenum target, GLfloat value);
+typedef void (APIENTRY *glChromiumParametervCRProc) (GLenum target, GLenum type, GLsizei count, const GLvoid *values);
+typedef void (APIENTRY *glGetChromiumParametervCRProc) (GLenum target, GLuint index, GLenum type, GLsizei count, GLvoid *values);
+
+extern void APIENTRY glChromiumParameteriCR(GLenum target, GLint value);
+extern void APIENTRY glChromiumParameterfCR(GLenum target, GLfloat value);
+extern void APIENTRY glChromiumParametervCR(GLenum target, GLenum type, GLsizei count, const GLvoid *values);
+extern void APIENTRY glGetChromiumParametervCR(GLenum target, GLuint index, GLenum type, GLsizei count, GLvoid *values);
+
+
+#endif /* GL_CR_state_parameter */
+
+
+#ifndef GL_CR_cursor_position
+#define GL_CR_cursor_position 1
+/* For virtual cursor feature (show_cursor) */
+
+#define GL_CURSOR_POSITION_CR  0x8AF0
+
+#endif /* GL_CR_cursor_position */
+
+
+#ifndef GL_CR_bounding_box
+#define GL_CR_bounding_box 1
+/* To set bounding box from client app */
+
+#define GL_DEFAULT_BBOX_CR  0x8AF1
+#define GL_SCREEN_BBOX_CR   0x8AF2
+#define GL_OBJECT_BBOX_CR   0x8AF3
+
+#endif /* GL_CR_bounding_box */
+
+
+#ifndef GL_CR_print_string
+#define GL_CR_print_string 1
+/* To print a string to stdout */
+#define GL_PRINT_STRING_CR  0x8AF4
+
+#endif /* GL_CR_print_string */
+
+
+#ifndef GL_CR_tilesort_info
+#define GL_CR_tilesort_info 1
+/* To query tilesort information */
+
+#define GL_MURAL_SIZE_CR             0x8AF5
+#define GL_NUM_SERVERS_CR            0x8AF6
+#define GL_NUM_TILES_CR              0x8AF7
+#define GL_TILE_BOUNDS_CR            0x8AF8
+#define GL_VERTEX_COUNTS_CR          0x8AF9
+#define GL_RESET_VERTEX_COUNTERS_CR  0x8AFA
+#define GL_SET_MAX_VIEWPORT_CR       0x8AFB
+
+#endif /* GL_CR_tilesort_info */
+
+
+#ifndef GL_CR_head_spu_name
+#define GL_CR_head_spu_name 1
+/* To fetch name of first SPU on a node */
+
+#define GL_HEAD_SPU_NAME_CR         0x8AFC
+
+#endif /* GL_CR_head_spu_name */
+
+
+#ifndef GL_CR_performance_info
+#define GL_CR_performance_info 1
+/* For gathering performance metrics */
+
+#define GL_PERF_GET_FRAME_DATA_CR       0x8AFD
+#define GL_PERF_GET_TIMER_DATA_CR       0x8AFE
+#define GL_PERF_DUMP_COUNTERS_CR        0x8AFF
+#define GL_PERF_SET_TOKEN_CR            0x8B00
+#define GL_PERF_SET_DUMP_ON_SWAP_CR     0x8B01
+#define GL_PERF_SET_DUMP_ON_FINISH_CR   0x8B02
+#define GL_PERF_SET_DUMP_ON_FLUSH_CR    0x8B03
+#define GL_PERF_START_TIMER_CR          0x8B04
+#define GL_PERF_STOP_TIMER_CR           0x8B05
+
+#endif /* GL_CR_performance_info */
+
+
+#ifndef GL_CR_window_size
+#define GL_CR_window_size 1
+/* To communicate window size changes */
+
+#define GL_WINDOW_SIZE_CR               0x8B06
+#define GL_MAX_WINDOW_SIZE_CR           0x8B24  /* new */
+#define GL_WINDOW_VISIBILITY_CR         0x8B25  /* new */
+
+#endif /* GL_CR_window_size */
+
+
+#ifndef GL_CR_tile_info
+#define GL_CR_tile_info 1
+/* To send new tile information to a server */
+
+#define GL_TILE_INFO_CR                 0x8B07
+
+#endif /* GL_CR_tile_info */
+
+
+#ifndef GL_CR_gather
+#define GL_CR_gather 1
+/* For aggregate transfers  */
+
+#define GL_GATHER_DRAWPIXELS_CR         0x8B08
+#define GL_GATHER_PACK_CR               0x8B09
+#define GL_GATHER_CONNECT_CR            0x8B0A
+#define GL_GATHER_POST_SWAPBUFFERS_CR   0x8B0B
+
+#endif /* GL_CR_gather */
+
+
+#ifndef GL_CR_saveframe
+#define GL_CR_saveframe 1
+
+#define GL_SAVEFRAME_ENABLED_CR         0x8B0C
+#define GL_SAVEFRAME_FRAMENUM_CR        0x8B0D
+#define GL_SAVEFRAME_STRIDE_CR          0x8B0E
+#define GL_SAVEFRAME_SINGLE_CR          0x8B0F
+#define GL_SAVEFRAME_FILESPEC_CR        0x8B10
+
+#endif /* GL_CR_saveframe */
+
+
+#ifndef GL_CR_readback_barrier_size
+#define GL_CR_readback_barrier_size 1
+
+#define GL_READBACK_BARRIER_SIZE_CR     0x8B11
+
+#endif /* GL_CR_readback_barrier_size */
+
+
+#ifndef GL_CR_server_id_sharing
+#define GL_CR_server_id_sharing 1
+
+#define GL_SHARED_DISPLAY_LISTS_CR      0x8B12
+#define GL_SHARED_TEXTURE_OBJECTS_CR    0x8B13
+#define GL_SHARED_PROGRAMS_CR           0x8B14
+
+#endif /* GL_CR_server_id_sharing */
+
+
+#ifndef GL_CR_server_matrix
+#define GL_CR_server_matrix 1
+
+#define GL_SERVER_VIEW_MATRIX_CR        0x8B15
+#define GL_SERVER_PROJECTION_MATRIX_CR  0x8B16
+#define GL_SERVER_FRUSTUM_CR            0x8B17
+#define GL_SERVER_CURRENT_EYE_CR        0x8B18
+
+#endif /* GL_CR_server_matrix */
+
+
+#ifndef GL_CR_window_position
+#define GL_CR_window_position 1
+
+#define GL_WINDOW_POSITION_CR           0x8B19
+
+#endif /* GL_CR_window_position */
+
+
+#ifndef GL_CR_zpix
+#define GL_CR_zpix 1
+
+#define GL_ZLIB_COMPRESSION_CR          0x8B20
+#define GL_RLE_COMPRESSION_CR           0x8B21
+#define GL_PLE_COMPRESSION_CR           0x8B22
+
+/* XXX A better name would be glCompressedDrawPixelsCR() */
+extern void APIENTRY glZPixCR(GLsizei width, GLsizei height, GLenum format,
+                              GLenum type, GLenum compressionType,
+                              GLint client, GLint compressedSize,
+                              const GLvoid *image);
+
+#endif /* GL_CR_zpix */
+
+/*Allow to use glGetString to query real host GPU info*/
+#ifndef GL_CR_real_vendor_strings
+#define GL_CR_real_vendor_strings 1
+#define GL_REAL_VENDOR     0x8B23
+#define GL_REAL_VERSION    0x8B24
+#define GL_REAL_RENDERER   0x8B25
+#define GL_REAL_EXTENSIONS 0x8B26
+#endif
+
+/*Global resource ids sharing*/
+#define GL_SHARE_CONTEXT_RESOURCES_CR 0x8B27
+/*do flush for the command buffer of a thread the context was previusly current for*/
+#define GL_FLUSH_ON_THREAD_SWITCH_CR  0x8B28
+/*report that the shared resource is used by this context, the parameter value is a texture name*/
+#define GL_RCUSAGE_TEXTURE_SET_CR     0x8B29
+/*report that the shared resource is no longer used by this context, the parameter value is a texture name*/
+#define GL_RCUSAGE_TEXTURE_CLEAR_CR   0x8B2A
+/*configures host to create windows initially hidden*/
+#define GL_HOST_WND_CREATED_HIDDEN_CR 0x8B2B
+/* guest requests host whether e debug break is needed*/
+#define GL_DBG_CHECK_BREAK_CR         0x8B2C
+/* Tells renderspu the default context id being used by the crserver */
+#define GL_HH_SET_DEFAULT_SHARED_CTX  0x8B2D
+
+#define GL_HH_SET_TMPCTX_MAKE_CURRENT 0x8B2E
+/* inform renderspu about the current render thread */
+#define GL_HH_RENDERTHREAD_INFORM     0x8B2F
+
+/* enable zero vertex attribute generation to work around wine bug */
+#define GL_CHECK_ZERO_VERT_ARRT       0x8B30
+
+/* share lists */
+#define GL_SHARE_LISTS_CR             0x8B31
+
+#define GL_HH_SET_CLIENT_CALLOUT      0x8B32
+
+/* ensure the resource is  */
+#define GL_PIN_TEXTURE_SET_CR         0x8B32
+#define GL_PIN_TEXTURE_CLEAR_CR       0x8B33
+
+/**********************************************************************/
+/*****                Chromium-specific API                       *****/
+/**********************************************************************/
+
+
+/*
+ * Accepted by crCreateContext() and crCreateWindow() visBits parameter.
+ * Used to communicate visual attributes throughout Chromium.
+ */
+#define CR_RGB_BIT            0x1
+#define CR_ALPHA_BIT          0x2
+#define CR_DEPTH_BIT          0x4
+#define CR_STENCIL_BIT        0x8
+#define CR_ACCUM_BIT          0x10
+#define CR_DOUBLE_BIT         0x20
+#define CR_STEREO_BIT         0x40
+#define CR_MULTISAMPLE_BIT    0x80
+#define CR_OVERLAY_BIT        0x100
+#define CR_PBUFFER_BIT        0x200
+#define CR_ALL_BITS           0x3ff
+
+
+/* Accepted by crSwapBuffers() flag parameter */
+#define CR_SUPPRESS_SWAP_BIT 0x1
+
+
+typedef GLint (APIENTRY *crCreateContextProc)(const char *dpyName, GLint visBits);
+typedef void (APIENTRY *crDestroyContextProc)(GLint context);
+typedef void (APIENTRY *crMakeCurrentProc)(GLint window, GLint context);
+typedef GLint (APIENTRY *crGetCurrentContextProc)(void);
+typedef GLint (APIENTRY *crGetCurrentWindowProc)(void);
+typedef void (APIENTRY *crSwapBuffersProc)(GLint window, GLint flags);
+
+typedef GLint (APIENTRY *crWindowCreateProc)(const char *dpyName, GLint visBits);
+typedef void (APIENTRY *crWindowDestroyProc)(GLint window);
+typedef void (APIENTRY *crWindowSizeProc)(GLint window, GLint w, GLint h);
+typedef void (APIENTRY *crWindowPositionProc)(GLint window, GLint x, GLint y);
+typedef void (APIENTRY *crWindowShowProc)( GLint window, GLint flag );
+
+extern GLint APIENTRY crCreateContext(char *dpyName, GLint visBits);
+extern void APIENTRY crDestroyContext(GLint context);
+extern void APIENTRY crMakeCurrent(GLint window, GLint context);
+extern GLint APIENTRY crGetCurrentContext(void);
+extern GLint APIENTRY crGetCurrentWindow(void);
+extern void APIENTRY crSwapBuffers(GLint window, GLint flags);
+extern GLint APIENTRY crWindowCreate(const char *dpyName, GLint visBits);
+extern void APIENTRY crWindowDestroy(GLint window);
+extern void APIENTRY crWindowSize(GLint window, GLint w, GLint h);
+extern void APIENTRY crWindowPosition(GLint window, GLint x, GLint y);
+extern void APIENTRY crWindowVisibleRegion( GLint window, GLint cRects, const void *pRects );
+extern void APIENTRY crWindowShow( GLint window, GLint flag );
+extern void APIENTRY crVBoxTexPresent(GLuint texture, GLuint cfg, GLint xPos, GLint yPos, GLint cRects, const GLint *pRects);
+
+typedef int (CR_APIENTRY *CR_PROC)(void);
+CR_PROC APIENTRY crGetProcAddress( const char *name );
+
+
+
+/**********************************************************************/
+/*****                 Other useful stuff                         *****/
+/**********************************************************************/
+
+#ifdef WINDOWS
+#define GET_PROC(NAME) wglGetProcAddress((const GLbyte *) (NAME))
+#elif defined(DARWIN)
+#define GET_PROC(NAME) NULL
+#elif defined(GLX_ARB_get_proc_address)
+#define GET_PROC(NAME) glXGetProcAddressARB((const GLubyte *) (NAME))
+#else
+/* For SGI, etc that don't have glXGetProcAddress(). */
+#define GET_PROC(NAME) NULL
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CHROMIUM_H__ */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_bits.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_bits.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_bits.h	(revision 86648)
@@ -0,0 +1,72 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+/* Bit vector functions */
+
+#ifndef CR_BITS_H
+#define CR_BITS_H
+
+
+#include "cr_compiler.h"
+
+
+#define CR_MAX_CONTEXTS      512
+#define CR_MAX_BITARRAY      (CR_MAX_CONTEXTS / 32) /* 32 contexts per uint */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static INLINE void RESET( unsigned int *b, const unsigned int *d )
+{
+    int j;
+    for (j=0;j<CR_MAX_BITARRAY;j++)
+        b[j] |= d[j];
+}
+static INLINE void DIRTY( unsigned int *b, const unsigned int *d )
+{
+    int j;
+    for (j=0;j<CR_MAX_BITARRAY;j++)
+        b[j] = d[j];
+}
+static INLINE void FILLDIRTY( unsigned int *b )
+{
+    int j;
+    for (j=0;j<CR_MAX_BITARRAY;j++)
+        b[j] = 0xffffffff;
+}
+static INLINE void CLEARDIRTY( unsigned int *b, const unsigned int *d )
+{
+    int j;
+    for (j=0;j<CR_MAX_BITARRAY;j++)
+        b[j] &= d[j];
+}
+
+/* As above, but complement the bits here instead of in the calling code */
+static INLINE void CLEARDIRTY2( unsigned int *b, const unsigned int *d )
+{
+    int j;
+    for (j=0;j<CR_MAX_BITARRAY;j++)
+        b[j] &= ~d[j];
+}
+
+static INLINE int CHECKDIRTY( const unsigned int *b, const unsigned int *d )
+{
+    int j;
+
+    for (j=0;j<CR_MAX_BITARRAY;j++)
+        if (b[j] & d[j])
+            return 1;
+
+    return 0;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* CR_BITS_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_blitter.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_blitter.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_blitter.h	(revision 86648)
@@ -0,0 +1,377 @@
+/* $Id$ */
+/** @file
+ * Blitter API.
+ */
+
+/*
+ * Copyright (C) 2013-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___cr_blitter_h
+#define ___cr_blitter_h
+
+#include <iprt/asm.h>
+#include <iprt/err.h>
+#include <iprt/string.h>
+#include "cr_vreg.h"
+#ifdef IN_VMSVGA3D
+# include <iprt/assert.h>
+typedef struct TODO_VMSVGA3D_DISPATCH_TABLE SPUDispatchTable;
+# include <OpenGL/OpenGL.h>
+#else
+# include "cr_spu.h"
+#endif
+
+/** @todo r=bird: VBOXBLITTERDECL makes no sense. */
+#ifndef IN_RING0
+# define VBOXBLITTERDECL(_type) DECLEXPORT(_type)
+#else
+# define VBOXBLITTERDECL(_type) RTDECL(_type)
+#endif
+
+RT_C_DECLS_BEGIN
+typedef struct CR_BLITTER_IMG
+{
+    void *pvData;
+    GLuint cbData;
+    GLenum enmFormat;
+    GLuint width, height;
+    GLuint bpp;
+    GLuint pitch;
+} CR_BLITTER_IMG;
+typedef CR_BLITTER_IMG *PCR_BLITTER_IMG;
+typedef CR_BLITTER_IMG const *PCCR_BLITTER_IMG;
+
+VBOXBLITTERDECL(void) CrMClrFillImgRect(PCR_BLITTER_IMG pDst, PCRTRECT pCopyRect, uint32_t u32Color);
+VBOXBLITTERDECL(void) CrMClrFillImg(PCR_BLITTER_IMG pImg, uint32_t cRects, PCRTRECT pRects, uint32_t u32Color);
+VBOXBLITTERDECL(void) CrMBltImgRect(PCCR_BLITTER_IMG pSrc, PCRTPOINT pSrcDataPoint, bool fSrcInvert, PCRTRECT pCopyRect,
+                                    PCR_BLITTER_IMG pDst);
+VBOXBLITTERDECL(void) CrMBltImg(PCCR_BLITTER_IMG pSrc, PCRTPOINT pPos, uint32_t cRects, PCRTRECT pRects, PCR_BLITTER_IMG pDst);
+VBOXBLITTERDECL(void) CrMBltImgRectScaled(PCCR_BLITTER_IMG pSrc, PCRTPOINT pPos, bool fSrcInvert, PCRTRECT pCopyRect,
+                                          float strX, float strY, PCR_BLITTER_IMG pDst);
+VBOXBLITTERDECL(void) CrMBltImgScaled(PCCR_BLITTER_IMG pSrc, PCRTRECTSIZE pSrcRectSize, PCRTRECT pDstRect, uint32_t cRects,
+                                      PCRTRECT pRects, PCR_BLITTER_IMG pDst);
+
+/*
+ * GLSL Cache
+ */
+typedef struct CR_GLSL_CACHE
+{
+    int iGlVersion;
+    GLuint uNoAlpha2DProg;
+    GLuint uNoAlpha2DRectProg;
+    SPUDispatchTable *pDispatch;
+} CR_GLSL_CACHE;
+typedef CR_GLSL_CACHE *PCR_GLSL_CACHE;
+typedef CR_GLSL_CACHE const *PCCR_GLSL_CACHE;
+
+DECLINLINE(void) CrGlslInit(PCR_GLSL_CACHE pCache, SPUDispatchTable *pDispatch)
+{
+    RT_ZERO(*pCache);
+    pCache->pDispatch = pDispatch;
+}
+
+DECLINLINE(bool) CrGlslIsInited(PCCR_GLSL_CACHE pCache)
+{
+    return !!pCache->pDispatch;
+}
+
+/* clients should set proper context before calling these funcs */
+VBOXBLITTERDECL(bool) CrGlslIsSupported(PCR_GLSL_CACHE pCache);
+VBOXBLITTERDECL(int)  CrGlslProgGenAllNoAlpha(PCR_GLSL_CACHE pCache);
+VBOXBLITTERDECL(int)  CrGlslProgGenNoAlpha(PCR_GLSL_CACHE pCache, GLenum enmTexTarget);
+VBOXBLITTERDECL(int)  CrGlslProgUseGenNoAlpha(PCR_GLSL_CACHE pCache, GLenum enmTexTarget);
+VBOXBLITTERDECL(int)  CrGlslProgUseNoAlpha(PCCR_GLSL_CACHE pCache, GLenum enmTexTarget);
+VBOXBLITTERDECL(void) CrGlslProgClear(PCCR_GLSL_CACHE pCache);
+VBOXBLITTERDECL(bool) CrGlslNeedsCleanup(PCCR_GLSL_CACHE pCache);
+VBOXBLITTERDECL(void) CrGlslCleanup(PCR_GLSL_CACHE pCache);
+VBOXBLITTERDECL(void) CrGlslTerm(PCR_GLSL_CACHE pCache);
+
+/*
+ * BLITTER
+ */
+typedef struct CR_BLITTER_BUFFER
+{
+    GLuint cbBuffer;
+    GLvoid *pvBuffer;
+} CR_BLITTER_BUFFER;
+typedef CR_BLITTER_BUFFER *PCR_BLITTER_BUFFER;
+typedef CR_BLITTER_BUFFER const *PCCR_BLITTER_BUFFER;
+
+typedef union CR_BLITTER_FLAGS
+{
+    struct
+    {
+        uint32_t Initialized         : 1;
+        uint32_t CtxCreated          : 1;
+        uint32_t SupportsFBO         : 1;
+        uint32_t SupportsPBO         : 1;
+        uint32_t CurrentMuralChanged : 1;
+        uint32_t LastWasFBODraw      : 1;
+        uint32_t ForceDrawBlit       : 1;
+        uint32_t ShadersGloal        : 1;
+        uint32_t Reserved            : 24;
+    };
+    uint32_t Value;
+} CR_BLITTER_FLAGS;
+
+struct CR_BLITTER;
+
+typedef DECLCALLBACK(int) FNCRBLT_BLITTER(struct CR_BLITTER *pBlitter, PCVBOXVR_TEXTURE pSrc, PCRTRECT paSrcRect,
+                                          PCRTRECTSIZE pDstSize, PCRTRECT paDstRect, uint32_t cRects, uint32_t fFlags);
+typedef FNCRBLT_BLITTER *PFNCRBLT_BLITTER;
+
+typedef struct CR_BLITTER_SPUITEM
+{
+    int id;
+    GLint visualBits;
+} CR_BLITTER_SPUITEM, *PCR_BLITTER_SPUITEM;
+
+typedef struct CR_BLITTER_CONTEXT
+{
+    CR_BLITTER_SPUITEM Base;
+} CR_BLITTER_CONTEXT;
+typedef CR_BLITTER_CONTEXT *PCR_BLITTER_CONTEXT;
+typedef CR_BLITTER_CONTEXT const *PCCR_BLITTER_CONTEXT;
+
+typedef struct CR_BLITTER_WINDOW
+{
+    CR_BLITTER_SPUITEM Base;
+    GLuint width, height;
+} CR_BLITTER_WINDOW;
+typedef CR_BLITTER_WINDOW *PCR_BLITTER_WINDOW;
+typedef CR_BLITTER_WINDOW const *PCCR_BLITTER_WINDOW;
+
+typedef struct CR_BLITTER
+{
+    GLuint idFBO;
+    CR_BLITTER_FLAGS Flags;
+    uint32_t cEnters;
+    PFNCRBLT_BLITTER pfnBlt;
+    CR_BLITTER_BUFFER Verticies;
+    CR_BLITTER_BUFFER Indicies;
+    RTRECTSIZE CurrentSetSize;
+    CR_BLITTER_WINDOW CurrentMural;
+    CR_BLITTER_CONTEXT CtxInfo;
+    int32_t i32MakeCurrentUserData;
+    SPUDispatchTable *pDispatch;
+    PCCR_GLSL_CACHE pGlslCache;
+    CR_GLSL_CACHE LocalGlslCache;
+} CR_BLITTER;
+typedef CR_BLITTER *PCR_BLITTER;
+typedef CR_BLITTER const *PCCR_BLITTER;
+
+DECLINLINE(GLboolean) CrBltIsInitialized(PCR_BLITTER pBlitter)
+{
+    return !!pBlitter->pDispatch;
+}
+
+VBOXBLITTERDECL(int)  CrBltInit(PCR_BLITTER pBlitter, PCCR_BLITTER_CONTEXT pCtxBase, bool fCreateNewCtx,
+                                bool fForceDrawBlt, PCCR_GLSL_CACHE pShaders, SPUDispatchTable *pDispatch);
+
+VBOXBLITTERDECL(void) CrBltTerm(PCR_BLITTER pBlitter);
+
+VBOXBLITTERDECL(int)  CrBltCleanup(PCR_BLITTER pBlitter);
+
+DECLINLINE(GLboolean) CrBltSupportsTexTex(PCR_BLITTER pBlitter)
+{
+    return pBlitter->Flags.SupportsFBO;
+}
+
+DECLINLINE(GLboolean) CrBltIsEntered(PCR_BLITTER pBlitter)
+{
+    return !!pBlitter->cEnters;
+}
+
+DECLINLINE(GLint) CrBltGetVisBits(PCR_BLITTER pBlitter)
+{
+    return pBlitter->CtxInfo.Base.visualBits;
+}
+
+
+DECLINLINE(GLboolean) CrBltIsEverEntered(PCR_BLITTER pBlitter)
+{
+    return !!pBlitter->Flags.Initialized;
+}
+
+DECLINLINE(void) CrBltSetMakeCurrentUserData(PCR_BLITTER pBlitter, int32_t i32MakeCurrentUserData)
+{
+    pBlitter->i32MakeCurrentUserData = i32MakeCurrentUserData;
+}
+
+VBOXBLITTERDECL(int) CrBltMuralSetCurrentInfo(PCR_BLITTER pBlitter, PCCR_BLITTER_WINDOW pMural);
+
+DECLINLINE(PCCR_BLITTER_WINDOW) CrBltMuralGetCurrentInfo(PCR_BLITTER pBlitter)
+{
+    return &pBlitter->CurrentMural;
+}
+
+VBOXBLITTERDECL(void) CrBltCheckUpdateViewport(PCR_BLITTER pBlitter);
+
+VBOXBLITTERDECL(void) CrBltLeave(PCR_BLITTER pBlitter);
+VBOXBLITTERDECL(int) CrBltEnter(PCR_BLITTER pBlitter);
+VBOXBLITTERDECL(void) CrBltBlitTexMural(PCR_BLITTER pBlitter, bool fBb, PCVBOXVR_TEXTURE pSrc, PCRTRECT paSrcRects,
+                                        PCRTRECT paDstRects, uint32_t cRects, uint32_t fFlags);
+VBOXBLITTERDECL(void) CrBltBlitTexTex(PCR_BLITTER pBlitter, PCVBOXVR_TEXTURE pSrc, PCRTRECT pSrcRect, PCVBOXVR_TEXTURE pDst,
+                                      PCRTRECT pDstRect, uint32_t cRects, uint32_t fFlags);
+VBOXBLITTERDECL(int) CrBltImgGetTex(PCR_BLITTER pBlitter, PCVBOXVR_TEXTURE pSrc, GLenum enmFormat, PCR_BLITTER_IMG pDst);
+
+VBOXBLITTERDECL(int) CrBltImgGetMural(PCR_BLITTER pBlitter, bool fBb, PCR_BLITTER_IMG pDst);
+VBOXBLITTERDECL(void) CrBltImgFree(PCR_BLITTER pBlitter, PCR_BLITTER_IMG pDst);
+VBOXBLITTERDECL(void) CrBltPresent(PCR_BLITTER pBlitter);
+/* */
+struct CR_TEXDATA;
+
+typedef DECLCALLBACK(void) FNCRTEXDATA_RELEASED(struct CR_TEXDATA *pTexture);
+typedef FNCRTEXDATA_RELEASED *PFNCRTEXDATA_RELEASED;
+
+typedef union CR_TEXDATA_FLAGS
+{
+    struct
+    {
+        uint32_t DataValid           : 1;
+        uint32_t DataAcquired        : 1;
+        uint32_t DataInverted        : 1;
+        uint32_t Entered             : 1;
+        uint32_t Reserved            : 28;
+    };
+    uint32_t Value;
+} CR_TEXDATA_FLAGS;
+
+
+typedef struct CR_TEXDATA
+{
+    VBOXVR_TEXTURE Tex;
+    volatile uint32_t cRefs;
+    /* fields specific to texture data download */
+    uint32_t idInvertTex;
+    uint32_t idPBO;
+    CR_TEXDATA_FLAGS Flags;
+    PCR_BLITTER pBlitter;
+    CR_BLITTER_IMG Img;
+    /*dtor*/
+    PFNCRTEXDATA_RELEASED pfnTextureReleased;
+    struct CR_TEXDATA *pScaledCache;
+} CR_TEXDATA;
+typedef CR_TEXDATA *PCR_TEXDATA;
+typedef CR_TEXDATA const *PCCR_TEXDATA;
+
+DECLINLINE(void) CrTdInit(PCR_TEXDATA pTex, PCVBOXVR_TEXTURE pVrTex, PCR_BLITTER pBlitter, PFNCRTEXDATA_RELEASED pfnTextureReleased)
+{
+    memset(pTex, 0, sizeof (*pTex));
+    pTex->Tex = *pVrTex;
+    pTex->cRefs = 1;
+    pTex->pBlitter = pBlitter;
+    pTex->pfnTextureReleased = pfnTextureReleased;
+}
+
+DECLINLINE(PCVBOXVR_TEXTURE) CrTdTexGet(PCCR_TEXDATA pTex)
+{
+    return &pTex->Tex;
+}
+
+DECLINLINE(PCR_BLITTER) CrTdBlitterGet(PCR_TEXDATA pTex)
+{
+    return pTex->pBlitter;
+}
+
+DECLINLINE(int) CrTdBltEnter(PCR_TEXDATA pTex)
+{
+    int rc;
+    if (pTex->Flags.Entered)
+        return VERR_INVALID_STATE;
+    rc = CrBltEnter(pTex->pBlitter);
+#ifdef IN_VMSVGA3D
+    AssertRCReturn(rc, rc);
+#else
+    if (!RT_SUCCESS(rc))
+    {
+        WARN(("CrBltEnter failed rc %d", rc));
+        return rc;
+    }
+#endif
+    pTex->Flags.Entered = 1;
+    return VINF_SUCCESS;
+}
+
+DECLINLINE(bool) CrTdBltIsEntered(PCR_TEXDATA pTex)
+{
+    return pTex->Flags.Entered;
+}
+
+DECLINLINE(void) CrTdBltLeave(PCR_TEXDATA pTex)
+{
+#ifdef IN_VMSVGA3D
+    AssertReturnVoid(pTex->Flags.Entered);
+#else
+    if (!pTex->Flags.Entered)
+    {
+        WARN(("invalid Blt Leave"));
+        return;
+    }
+#endif
+
+    CrBltLeave(pTex->pBlitter);
+
+    pTex->Flags.Entered = 0;
+}
+
+/* the CrTdBltXxx calls are done with the entered blitter */
+/** Acquire the texture data, returns the cached data in case it is cached.
+ * The data remains cached in the CR_TEXDATA object until it is discarded with
+ * CrTdBltDataFree or CrTdBltDataCleanup. */
+VBOXBLITTERDECL(int) CrTdBltDataAcquire(PCR_TEXDATA pTex, GLenum enmFormat, bool fInverted, PCCR_BLITTER_IMG *ppImg);
+
+VBOXBLITTERDECL(int) CrTdBltDataAcquireScaled(PCR_TEXDATA pTex, GLenum enmFormat, bool fInverted,
+                                              uint32_t width, uint32_t height, PCCR_BLITTER_IMG *ppImg);
+
+VBOXBLITTERDECL(int) CrTdBltDataReleaseScaled(PCR_TEXDATA pTex, PCCR_BLITTER_IMG pImg);
+
+VBOXBLITTERDECL(void) CrTdBltScaleCacheMoveTo(PCR_TEXDATA pTex, PCR_TEXDATA pDstTex);
+
+/** Release the texture data, the data remains cached in the CR_TEXDATA object
+ * until it is discarded with CrTdBltDataFree or CrTdBltDataCleanup. */
+VBOXBLITTERDECL(int) CrTdBltDataRelease(PCR_TEXDATA pTex);
+/** Discard the texture data cached with previous CrTdBltDataAcquire.
+ * Must be called wit data released (CrTdBltDataRelease). */
+VBOXBLITTERDECL(int) CrTdBltDataFree(PCR_TEXDATA pTex);
+VBOXBLITTERDECL(int) CrTdBltDataFreeNe(PCR_TEXDATA pTex);
+VBOXBLITTERDECL(void) CrTdBltDataInvalidateNe(PCR_TEXDATA pTex);
+/** Does same as CrTdBltDataFree, and in addition cleans up.
+ * This is kind of a texture destructor, which clients should call on texture object destruction,
+ * e.g. from the PFNCRTEXDATA_RELEASED callback. */
+VBOXBLITTERDECL(int) CrTdBltDataCleanup(PCR_TEXDATA pTex);
+
+VBOXBLITTERDECL(int) CrTdBltDataCleanupNe(PCR_TEXDATA pTex);
+
+DECLINLINE(uint32_t) CrTdAddRef(PCR_TEXDATA pTex)
+{
+    return ASMAtomicIncU32(&pTex->cRefs);
+}
+
+DECLINLINE(uint32_t) CrTdRelease(PCR_TEXDATA pTex)
+{
+    uint32_t cRefs = ASMAtomicDecU32(&pTex->cRefs);
+    if (!cRefs)
+    {
+        if (pTex->pfnTextureReleased)
+            pTex->pfnTextureReleased(pTex);
+        else
+            CrTdBltDataCleanupNe(pTex);
+    }
+
+    return cRefs;
+}
+
+RT_C_DECLS_END
+
+#endif
+
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_bmpscale.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_bmpscale.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_bmpscale.h	(revision 86648)
@@ -0,0 +1,25 @@
+#ifndef ___cr_bmpscale_h__
+#define ___cr_bmpscale_h__
+
+#include <iprt/types.h>
+#include <iprt/cdefs.h>
+
+
+RT_C_DECLS_BEGIN
+
+#ifndef IN_RING0
+# define VBOXBMPSCALEDECL(_type) DECLEXPORT(_type)
+#else
+# define VBOXBLITTERDECL(_type) RTDECL(_type)
+#endif
+
+VBOXBMPSCALEDECL(void) CrBmpScale32 (uint8_t *dst,
+                        int iDstDeltaLine,
+                        int dstW, int dstH,
+                        const uint8_t *src,
+                        int iSrcDeltaLine,
+                        int srcW, int srcH);
+
+RT_C_DECLS_END
+
+#endif /* #ifndef ___cr_bmpscale_h__ */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_bufpool.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_bufpool.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_bufpool.h	(revision 86648)
@@ -0,0 +1,33 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_BUFPOOL_H
+#define CR_BUFPOOL_H
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct CRBufferPool_t CRBufferPool;
+typedef void (*CRBufferPoolDeleteCallback)(void *data);
+
+DECLEXPORT(CRBufferPool *) crBufferPoolInit( unsigned int maxBuffers );
+DECLEXPORT(void) crBufferPoolFree( CRBufferPool *pool );
+DECLEXPORT(void) crBufferPoolCallbackFree(CRBufferPool *pool, CRBufferPoolDeleteCallback pfnDelete);
+
+DECLEXPORT(void)   crBufferPoolPush( CRBufferPool *pool, void *buf, unsigned int bytes );
+DECLEXPORT(void *) crBufferPoolPop( CRBufferPool *pool, unsigned int bytes );
+
+DECLEXPORT(int) crBufferPoolGetNumBuffers( CRBufferPool *pool );
+DECLEXPORT(int) crBufferPoolGetMaxBuffers( CRBufferPool *pool );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_BUFPOOL_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_compiler.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_compiler.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_compiler.h	(revision 86648)
@@ -0,0 +1,45 @@
+/**
+ * Compiler-related definitions, etc.
+ */
+
+#ifndef CR_COMPILER_H
+#define CR_COMPILER_H 1
+
+
+/**
+ * Function inlining
+ */
+#if defined(__GNUC__)
+#  define INLINE __inline__
+#elif defined(__MSC__)
+#  define INLINE __inline
+#elif defined(_MSC_VER)
+#  define INLINE __inline
+#elif defined(__ICL)
+#  define INLINE __inline
+#else
+#  define INLINE
+#endif
+
+
+/**
+ * For global vars in shared libs
+ */
+#include <iprt/cdefs.h>
+
+#ifndef DLLDATA
+#define DLLDATA(type) DECLIMPORT(type)
+#endif
+
+/**
+ * For functions called via the public API.
+ * XXX CR_APIENTRY could probably replace all the other *_APIENTRY defines.
+ */
+#ifdef WINDOWS
+#define CR_APIENTRY __stdcall
+#else
+#define CR_APIENTRY
+#endif
+
+
+#endif /* CR_COMPILER_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_compositor.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_compositor.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_compositor.h	(revision 86648)
@@ -0,0 +1,265 @@
+/* $Id$ */
+/** @file
+ * Compositor API.
+ */
+
+/*
+ * Copyright (C) 2013-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___cr_compositor_h
+#define ___cr_compositor_h
+
+#include "cr_vreg.h"
+#include "cr_blitter.h"
+
+
+/* Compositor with Stretching & Cached Rectangles info */
+
+RT_C_DECLS_BEGIN
+
+struct VBOXVR_SCR_COMPOSITOR_ENTRY;
+struct VBOXVR_SCR_COMPOSITOR;
+
+typedef DECLCALLBACK(void) FNVBOXVRSCRCOMPOSITOR_ENTRY_RELEASED(const struct VBOXVR_SCR_COMPOSITOR *pCompositor,
+                                                                struct VBOXVR_SCR_COMPOSITOR_ENTRY *pEntry,
+                                                                struct VBOXVR_SCR_COMPOSITOR_ENTRY *pReplacingEntry);
+typedef FNVBOXVRSCRCOMPOSITOR_ENTRY_RELEASED *PFNVBOXVRSCRCOMPOSITOR_ENTRY_RELEASED;
+
+
+typedef struct VBOXVR_SCR_COMPOSITOR_ENTRY
+{
+    VBOXVR_COMPOSITOR_ENTRY Ce;
+    RTRECT Rect;
+    uint32_t fChanged;
+    uint32_t fFlags;
+    uint32_t cRects;
+    PRTRECT paSrcRects;
+    PRTRECT paDstRects;
+    PRTRECT paDstUnstretchedRects;
+    PFNVBOXVRSCRCOMPOSITOR_ENTRY_RELEASED pfnEntryReleased;
+    PCR_TEXDATA pTex;
+} VBOXVR_SCR_COMPOSITOR_ENTRY;
+typedef VBOXVR_SCR_COMPOSITOR_ENTRY *PVBOXVR_SCR_COMPOSITOR_ENTRY;
+typedef VBOXVR_SCR_COMPOSITOR_ENTRY const *PCVBOXVR_SCR_COMPOSITOR_ENTRY;
+
+typedef struct VBOXVR_SCR_COMPOSITOR
+{
+    VBOXVR_COMPOSITOR Compositor;
+    RTRECT Rect;
+#ifndef IN_RING0
+    float StretchX;
+    float StretchY;
+#endif
+    uint32_t fFlags;
+    uint32_t cRects;
+    uint32_t cRectsBuffer;
+    PRTRECT paSrcRects;
+    PRTRECT paDstRects;
+    PRTRECT paDstUnstretchedRects;
+} VBOXVR_SCR_COMPOSITOR;
+typedef VBOXVR_SCR_COMPOSITOR *PVBOXVR_SCR_COMPOSITOR;
+typedef VBOXVR_SCR_COMPOSITOR const *PCVBOXVR_SCR_COMPOSITOR;
+
+
+typedef DECLCALLBACK(bool) FNVBOXVRSCRCOMPOSITOR_VISITOR(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry,
+                                                         void *pvVisitor);
+typedef FNVBOXVRSCRCOMPOSITOR_VISITOR *PFNVBOXVRSCRCOMPOSITOR_VISITOR;
+
+DECLINLINE(void) CrVrScrCompositorEntryInit(PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, PCRTRECT pRect, CR_TEXDATA *pTex,
+                                            PFNVBOXVRSCRCOMPOSITOR_ENTRY_RELEASED pfnEntryReleased)
+{
+    memset(pEntry, 0, sizeof (*pEntry));
+    VBoxVrCompositorEntryInit(&pEntry->Ce);
+    pEntry->Rect = *pRect;
+    pEntry->pfnEntryReleased = pfnEntryReleased;
+    if (pTex)
+    {
+        CrTdAddRef(pTex);
+        pEntry->pTex = pTex;
+    }
+}
+
+DECLINLINE(void) CrVrScrCompositorEntryCleanup(PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry)
+{
+    if (pEntry->pTex)
+    {
+        CrTdRelease(pEntry->pTex);
+        pEntry->pTex = NULL;
+    }
+}
+
+DECLINLINE(bool) CrVrScrCompositorEntryIsUsed(PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry)
+{
+    return VBoxVrCompositorEntryIsInList(&pEntry->Ce);
+}
+
+DECLINLINE(void) CrVrScrCompositorEntrySetChanged(PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, bool fChanged)
+{
+    pEntry->fChanged = !!fChanged;
+}
+
+DECLINLINE(void) CrVrScrCompositorEntryTexSet(PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, CR_TEXDATA *pTex)
+{
+    if (pEntry->pTex)
+        CrTdRelease(pEntry->pTex);
+
+    if (pTex)
+        CrTdAddRef(pTex);
+
+    pEntry->pTex = pTex;
+}
+
+DECLINLINE(CR_TEXDATA *) CrVrScrCompositorEntryTexGet(PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry)
+{
+    return pEntry->pTex;
+}
+
+DECLINLINE(bool) CrVrScrCompositorEntryIsChanged(PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry)
+{
+    return !!pEntry->fChanged;
+}
+
+DECLINLINE(bool) CrVrScrCompositorIsEmpty(PCVBOXVR_SCR_COMPOSITOR pCompositor)
+{
+    return VBoxVrCompositorIsEmpty(&pCompositor->Compositor);
+}
+
+VBOXVREGDECL(int) CrVrScrCompositorEntryRectSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry,
+                                                PCRTRECT pRect);
+VBOXVREGDECL(int) CrVrScrCompositorEntryTexAssign(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry,
+                                                  CR_TEXDATA *pTex);
+VBOXVREGDECL(void) CrVrScrCompositorVisit(PVBOXVR_SCR_COMPOSITOR pCompositor, PFNVBOXVRSCRCOMPOSITOR_VISITOR pfnVisitor,
+                                          void *pvVisitor);
+VBOXVREGDECL(void) CrVrScrCompositorEntrySetAllChanged(PVBOXVR_SCR_COMPOSITOR pCompositor, bool fChanged);
+DECLINLINE(bool) CrVrScrCompositorEntryIsInList(PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry)
+{
+    return VBoxVrCompositorEntryIsInList(&pEntry->Ce);
+}
+VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsAdd(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry,
+                                                   PCRTPOINT pPos, uint32_t cRegions, PCRTRECT paRegions, bool fPosRelated,
+                                                   VBOXVR_SCR_COMPOSITOR_ENTRY **ppReplacedScrEntry, uint32_t *pfChangeFlags);
+VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry,
+                                                   PCRTPOINT pPos, uint32_t cRegions, PCRTRECT paRegions, bool fPosRelated,
+                                                   bool *pfChanged);
+VBOXVREGDECL(int) CrVrScrCompositorEntryListIntersect(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry,
+                                                      PCVBOXVR_LIST pList2, bool *pfChanged);
+VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsIntersect(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry,
+                                                         uint32_t cRegions, PCRTRECT paRegions, bool *pfChanged);
+VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsIntersectAll(PVBOXVR_SCR_COMPOSITOR pCompositor, uint32_t cRegions,
+                                                            PCRTRECT paRegions, bool *pfChanged);
+VBOXVREGDECL(int) CrVrScrCompositorEntryListIntersectAll(PVBOXVR_SCR_COMPOSITOR pCompositor, PCVBOXVR_LIST pList2,
+                                                         bool *pfChanged);
+VBOXVREGDECL(int) CrVrScrCompositorEntryPosSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry,
+                                               PCRTPOINT pPos);
+DECLINLINE(PCRTRECT) CrVrScrCompositorEntryRectGet(PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry)
+{
+    return &pEntry->Rect;
+}
+
+/* regions are valid until the next CrVrScrCompositor call */
+VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsGet(PCVBOXVR_SCR_COMPOSITOR pCompositor,
+                                                   PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, uint32_t *pcRegions,
+                                                   PCRTRECT *ppaSrcRegions, PCRTRECT *ppaDstRegions,
+                                                   PCRTRECT *ppaDstUnstretchedRects);
+VBOXVREGDECL(int) CrVrScrCompositorEntryRemove(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry);
+VBOXVREGDECL(bool) CrVrScrCompositorEntryReplace(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry,
+                                                 PVBOXVR_SCR_COMPOSITOR_ENTRY pNewEntry);
+VBOXVREGDECL(void) CrVrScrCompositorEntryFlagsSet(PVBOXVR_SCR_COMPOSITOR_ENTRY pEntry, uint32_t fFlags);
+VBOXVREGDECL(uint32_t) CrVrScrCompositorEntryFlagsCombinedGet(PCVBOXVR_SCR_COMPOSITOR pCompositor,
+                                                              PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry);
+DECLINLINE(uint32_t) CrVrScrCompositorEntryFlagsGet(PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry)
+{
+    return pEntry->fFlags;
+}
+
+VBOXVREGDECL(void) CrVrScrCompositorInit(PVBOXVR_SCR_COMPOSITOR pCompositor, PCRTRECT pRect);
+VBOXVREGDECL(int) CrVrScrCompositorRectSet(PVBOXVR_SCR_COMPOSITOR pCompositor, PCRTRECT pRect, bool *pfChanged);
+DECLINLINE(PCRTRECT) CrVrScrCompositorRectGet(PCVBOXVR_SCR_COMPOSITOR pCompositor)
+{
+    return &pCompositor->Rect;
+}
+
+VBOXVREGDECL(void) CrVrScrCompositorClear(PVBOXVR_SCR_COMPOSITOR pCompositor);
+VBOXVREGDECL(void) CrVrScrCompositorRegionsClear(PVBOXVR_SCR_COMPOSITOR pCompositor, bool *pfChanged);
+
+typedef DECLCALLBACK(VBOXVR_SCR_COMPOSITOR_ENTRY*) FNVBOXVR_SCR_COMPOSITOR_ENTRY_FOR(PCVBOXVR_SCR_COMPOSITOR_ENTRY pEntry,
+                                                                                     void *pvContext);
+typedef FNVBOXVR_SCR_COMPOSITOR_ENTRY_FOR *PFNVBOXVR_SCR_COMPOSITOR_ENTRY_FOR;
+
+VBOXVREGDECL(int) CrVrScrCompositorClone(PCVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR pDstCompositor,
+                                         PFNVBOXVR_SCR_COMPOSITOR_ENTRY_FOR pfnEntryFor, void *pvEntryFor);
+VBOXVREGDECL(int) CrVrScrCompositorIntersectList(PVBOXVR_SCR_COMPOSITOR pCompositor, PCVBOXVR_LIST pVr, bool *pfChanged);
+VBOXVREGDECL(int) CrVrScrCompositorIntersectedList(PCVBOXVR_SCR_COMPOSITOR pCompositor, PCVBOXVR_LIST pVr,
+                                                   PVBOXVR_SCR_COMPOSITOR pDstCompositor,
+                                                   PFNVBOXVR_SCR_COMPOSITOR_ENTRY_FOR pfnEntryFor, void *pvEntryFor, bool *pfChanged);
+#ifndef IN_RING0
+VBOXVREGDECL(void) CrVrScrCompositorSetStretching(PVBOXVR_SCR_COMPOSITOR pCompositor, float StretchX, float StretchY);
+DECLINLINE(void) CrVrScrCompositorGetStretching(PCVBOXVR_SCR_COMPOSITOR pCompositor, float *pStretchX, float *pStretchY)
+{
+    if (pStretchX)
+        *pStretchX = pCompositor->StretchX;
+
+    if (pStretchY)
+        *pStretchY = pCompositor->StretchY;
+}
+#endif
+/* regions are valid until the next CrVrScrCompositor call */
+VBOXVREGDECL(int) CrVrScrCompositorRegionsGet(PCVBOXVR_SCR_COMPOSITOR pCompositor, uint32_t *pcRegions,
+                                              PCRTRECT *ppaSrcRegions, PCRTRECT *ppaDstRegions, PCRTRECT *ppaDstUnstretchedRects);
+
+#define VBOXVR_SCR_COMPOSITOR_ENTRY_FROM_ENTRY(_p)          RT_FROM_MEMBER(_p, VBOXVR_SCR_COMPOSITOR_ENTRY, Ce)
+#define VBOXVR_SCR_COMPOSITOR_CONST_ENTRY_FROM_ENTRY(_p)    RT_FROM_MEMBER(_p, const VBOXVR_SCR_COMPOSITOR_ENTRY, Ce)
+#define VBOXVR_SCR_COMPOSITOR_FROM_COMPOSITOR(_p)           RT_FROM_MEMBER(_p, VBOXVR_SCR_COMPOSITOR, Compositor)
+
+typedef struct VBOXVR_SCR_COMPOSITOR_ITERATOR
+{
+    VBOXVR_COMPOSITOR_ITERATOR Base;
+} VBOXVR_SCR_COMPOSITOR_ITERATOR;
+typedef VBOXVR_SCR_COMPOSITOR_ITERATOR *PVBOXVR_SCR_COMPOSITOR_ITERATOR;
+
+typedef struct VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR
+{
+    VBOXVR_COMPOSITOR_CONST_ITERATOR Base;
+} VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR;
+typedef VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR *PVBOXVR_SCR_COMPOSITOR_CONST_ITERATOR;
+
+DECLINLINE(void) CrVrScrCompositorIterInit(PVBOXVR_SCR_COMPOSITOR pCompositor, PVBOXVR_SCR_COMPOSITOR_ITERATOR pIter)
+{
+    VBoxVrCompositorIterInit(&pCompositor->Compositor, &pIter->Base);
+}
+
+DECLINLINE(void) CrVrScrCompositorConstIterInit(PCVBOXVR_SCR_COMPOSITOR pCompositor,
+                                                PVBOXVR_SCR_COMPOSITOR_CONST_ITERATOR pIter)
+{
+    VBoxVrCompositorConstIterInit(&pCompositor->Compositor, &pIter->Base);
+}
+
+DECLINLINE(PVBOXVR_SCR_COMPOSITOR_ENTRY) CrVrScrCompositorIterNext(PVBOXVR_SCR_COMPOSITOR_ITERATOR pIter)
+{
+    PVBOXVR_COMPOSITOR_ENTRY pCe = VBoxVrCompositorIterNext(&pIter->Base);
+    if (pCe)
+        return VBOXVR_SCR_COMPOSITOR_ENTRY_FROM_ENTRY(pCe);
+    return NULL;
+}
+
+DECLINLINE(PCVBOXVR_SCR_COMPOSITOR_ENTRY) CrVrScrCompositorConstIterNext(PVBOXVR_SCR_COMPOSITOR_CONST_ITERATOR pIter)
+{
+    PCVBOXVR_COMPOSITOR_ENTRY pCe = VBoxVrCompositorConstIterNext(&pIter->Base);
+    if (pCe)
+        return VBOXVR_SCR_COMPOSITOR_CONST_ENTRY_FROM_ENTRY(pCe);
+    return NULL;
+}
+
+RT_C_DECLS_END
+
+#endif
+
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_dispatch.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_dispatch.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_dispatch.h	(revision 86648)
@@ -0,0 +1,66 @@
+#ifndef CR_DISPATCH_H
+#define CR_DISPATCH_H
+
+#include "spu_dispatch_table.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * This structure offers a set of layers for controlling the
+ * dispatch table.  The top layer is always the active layer,
+ * and controls the dispatch table.  Utilities may push new
+ * layers onto the stack, or pop layers off, to control how
+ * dispatches are made.  A utility  may keep track of the
+ * layer it created, and change it as needed, if dynamic
+ * control of dispatch tables is needed.
+ */
+
+typedef struct crDispatchLayer {
+    SPUDispatchTable *dispatchTable;
+    void (*changedCallback)(SPUDispatchTable *changedTable, void *callbackParm);
+    void *callbackParm;
+    struct crDispatchLayer *next, *prev;
+} crDispatchLayer;
+
+/** This has to be saved and restored for each graphics context */
+typedef struct {
+    crDispatchLayer *topLayer;
+    crDispatchLayer *bottomLayer;
+} crCurrentDispatchInfo;
+
+/**
+ * These are already called from appropriate opengl_stub
+ * routines, so SPUs or utilities shouldn't have to 
+ * worry about them, as long as they let their
+ * parent routines for NewContext and MakeCurrent
+ * execute before they try to use any of the
+ * dispatch utilities.
+ */
+DECLEXPORT(void) crDispatchInit(SPUDispatchTable *defaultTable);
+DECLEXPORT(void) crInitDispatchInfo(crCurrentDispatchInfo *info);
+DECLEXPORT(void) crSetCurrentDispatchInfo(crCurrentDispatchInfo *info);
+
+/**
+ * SPUs and utilities are expected to use these routines
+ * to modify dispatch tables.  They should only be called
+ * once the current dispatch info is set (i.e., after
+ * the opengl_stub routine for MakeCurrent has a chance
+ * to run).
+ */
+DECLEXPORT(crDispatchLayer) *crNewDispatchLayer(SPUDispatchTable *newTable, 
+        void (*changedCallback)(SPUDispatchTable *changedTable, void *callbackParm),
+	void *callbackParm);
+DECLEXPORT(void) crChangeDispatchLayer(crDispatchLayer *layer,
+        SPUDispatchTable *changedTable);
+DECLEXPORT(void) crFreeDispatchLayer(crDispatchLayer *layer);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_DISPATCH_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_dll.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_dll.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_dll.h	(revision 86648)
@@ -0,0 +1,49 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_DLL_H
+#define CR_DLL_H
+
+#if defined(WINDOWS)
+#define WIN32_LEAN_AND_MEAN
+# ifdef VBOX
+#  include <iprt/win/windows.h>
+# else
+#include <windows.h>
+# endif
+#endif
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	char *name;
+#if defined(WINDOWS)
+	HINSTANCE hinstLib;
+#elif defined(IRIX) || defined(IRIX64) || defined(Linux) || defined(FreeBSD) || defined(AIX) || defined(SunOS) || defined(OSF1)
+	void *hinstLib;
+#elif defined(DARWIN)
+	void *hinstLib;		/* void to avoid including the headers */
+	int type;		/* to avoid calling crStrstr all the time */
+#else
+#error ARCHITECTURE DLL NOT IMPLEMENTED
+#endif
+} CRDLL;
+
+typedef void (*CRDLLFunc)(void);
+DECLEXPORT(CRDLL *)   crDLLOpen( const char *dllname, int resolveGlobal );
+DECLEXPORT(CRDLLFunc) crDLLGetNoError( CRDLL *dll, const char *symname );
+DECLEXPORT(CRDLLFunc) crDLLGet( CRDLL *dll, const char *symname );
+DECLEXPORT(void)      crDLLClose( CRDLL *dll );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_DLL_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_dump.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_dump.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_dump.h	(revision 86648)
@@ -0,0 +1,177 @@
+/* $Id$ */
+
+/** @file
+ * Debugging: Dump API
+ */
+/*
+ * Copyright (C) 2013-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+#ifndef ___cr_dump_h__
+#define ___cr_dump_h__
+
+/* dump stuff */
+//#define VBOX_WITH_CRDUMPER
+#ifdef VBOX_WITH_CRDUMPER
+
+#include <iprt/cdefs.h>
+#include <iprt/string.h>
+#include <cr_spu.h>
+#include <cr_glstate.h>
+#include <cr_blitter.h>
+
+# define VBOXDUMPDECL(_type) _type RTCALL
+
+RT_C_DECLS_BEGIN
+
+#ifdef RT_OS_WINDOWS
+DECLEXPORT(void) crDmpDumpImgDmlBreak(struct CR_DUMPER * pDumper, CR_BLITTER_IMG *pImg, const char*pszEntryDesc);
+
+DECLEXPORT(void) crDmpDumpStrDbgPrint(struct CR_DUMPER * pDumper, const char*pszStr);
+#endif
+
+struct CR_DUMPER;
+
+typedef DECLCALLBACKPTR(void, PFNCRDUMPIMG)(struct CR_DUMPER * pDumper, CR_BLITTER_IMG *pImg, const char*pszEntryDesc);
+typedef DECLCALLBACKPTR(void, PFNCRDUMPSTR)(struct CR_DUMPER * pDumper, const char*pszStr);
+
+typedef struct CR_DUMPER
+{
+    PFNCRDUMPIMG pfnDumpImg;
+    PFNCRDUMPSTR pfnDumpStr;
+} CR_DUMPER;
+
+#define crDmpImg(_pDumper, _pImg, _pDesc) do { \
+            (_pDumper)->pfnDumpImg((_pDumper), (_pImg), (_pDesc)); \
+        } while (0)
+
+#define crDmpStr(_pDumper, _pDesc) do { \
+            (_pDumper)->pfnDumpStr((_pDumper), (_pDesc)); \
+        } while (0)
+
+#ifndef RT_OS_WINDOWS
+# define vsprintf_s vsnprintf
+# define sprintf_s snprintf
+#endif
+
+DECLINLINE(void) crDmpStrV(CR_DUMPER *pDumper, const char *pszStr, va_list pArgList)
+{
+    char szBuffer[4096] = {0};
+    vsprintf_s(szBuffer, sizeof (szBuffer), pszStr, pArgList);
+    crDmpStr(pDumper, szBuffer);
+}
+
+DECLINLINE(void) crDmpStrF(CR_DUMPER *pDumper, const char *pszStr, ...)
+{
+    va_list pArgList;
+    va_start(pArgList, pszStr);
+    crDmpStrV(pDumper, pszStr, pArgList);
+    va_end(pArgList);
+}
+
+DECLINLINE(void) crDmpImgV(CR_DUMPER *pDumper, CR_BLITTER_IMG *pImg, const char *pszStr, va_list pArgList)
+{
+    char szBuffer[4096] = {0};
+    vsprintf_s(szBuffer, sizeof (szBuffer), pszStr, pArgList);
+    crDmpImg(pDumper, pImg, szBuffer);
+}
+
+DECLINLINE(void) crDmpImgF(CR_DUMPER *pDumper, CR_BLITTER_IMG *pImg, const char *pszStr, ...)
+{
+    va_list pArgList;
+    va_start(pArgList, pszStr);
+    crDmpImgV(pDumper, pImg, pszStr, pArgList);
+    va_end(pArgList);
+}
+
+VBOXDUMPDECL(size_t) crDmpFormatArray(char *pString, size_t cbString, const char *pszElFormat, uint32_t cbEl, const void *pVal, uint32_t cVal);
+VBOXDUMPDECL(size_t) crDmpFormatRawArray(char *pString, size_t cbString, const char *pszElFormat, uint32_t cbEl, const void *pVal, uint32_t cVal);
+VBOXDUMPDECL(size_t) crDmpFormatMatrixArray(char *pString, size_t cbString, const char *pszElFormat, uint32_t cbEl, const void *pVal, uint32_t cX, uint32_t cY);
+
+typedef struct CR_DBGPRINT_DUMPER
+{
+    CR_DUMPER Base;
+} CR_DBGPRINT_DUMPER;
+
+typedef struct CR_HTML_DUMPER
+{
+    CR_DUMPER Base;
+    const char* pszFile;
+    const char* pszDir;
+    FILE *pFile;
+    uint32_t cImg;
+} CR_HTML_DUMPER;
+
+DECLEXPORT(bool) crDmpHtmlIsInited(struct CR_HTML_DUMPER * pDumper);
+DECLEXPORT(void) crDmpHtmlTerm(struct CR_HTML_DUMPER * pDumper);
+DECLEXPORT(int) crDmpHtmlInit(struct CR_HTML_DUMPER * pDumper, const char *pszDir, const char *pszFile);
+DECLEXPORT(int) crDmpHtmlInitV(struct CR_HTML_DUMPER * pDumper, const char *pszDir, const char *pszFile, va_list pArgList);
+DECLEXPORT(int) crDmpHtmlInitF(struct CR_HTML_DUMPER * pDumper, const char *pszDir, const char *pszFile, ...);
+
+#ifdef RT_OS_WINDOWS
+DECLINLINE(void) crDmpDbgPrintInit(CR_DBGPRINT_DUMPER *pDumper)
+{
+    pDumper->Base.pfnDumpImg = crDmpDumpImgDmlBreak;
+    pDumper->Base.pfnDumpStr = crDmpDumpStrDbgPrint;
+}
+#endif
+
+typedef struct CR_RECORDER
+{
+    CR_BLITTER *pBlitter;
+    SPUDispatchTable *pDispatch;
+    CR_DUMPER *pDumper;
+} CR_RECORDER;
+
+DECLINLINE(void) crRecInit(CR_RECORDER *pRec, CR_BLITTER *pBlitter, SPUDispatchTable *pDispatch, CR_DUMPER *pDumper)
+{
+    pRec->pBlitter = pBlitter;
+    pRec->pDispatch = pDispatch;
+    pRec->pDumper = pDumper;
+}
+
+VBOXDUMPDECL(void) crRecDumpBuffer(CR_RECORDER *pRec, CRContext *ctx, GLint idRedirFBO, VBOXVR_TEXTURE *pRedirTex);
+VBOXDUMPDECL(void) crRecDumpTextures(CR_RECORDER *pRec, CRContext *ctx);
+VBOXDUMPDECL(void) crRecDumpTextureV(CR_RECORDER *pRec, const VBOXVR_TEXTURE *pTex, CR_BLITTER_CONTEXT *pCurCtx, CR_BLITTER_WINDOW *pCurWin, const char *pszStr, va_list pArgList);
+VBOXDUMPDECL(void) crRecDumpTextureF(CR_RECORDER *pRec, const VBOXVR_TEXTURE *pTex, const char *pszStr, ...);
+VBOXDUMPDECL(void) crRecDumpTextureByIdV(CR_RECORDER *pRec, CRContext *ctx, GLint id, CR_BLITTER_CONTEXT *pCurCtx, CR_BLITTER_WINDOW *pCurWin, const char *pszStr, va_list pArgList);
+VBOXDUMPDECL(void) crRecDumpTextureByIdF(CR_RECORDER *pRec, CRContext *ctx, GLint id, CR_BLITTER_CONTEXT *pCurCtx, CR_BLITTER_WINDOW *pCurWin, const char *pszStr, ...);
+VBOXDUMPDECL(void) crRecDumpShader(CR_RECORDER *pRec, CRContext *ctx, GLint id, GLint hwid);
+VBOXDUMPDECL(void) crRecDumpProgram(CR_RECORDER *pRec, CRContext *ctx, GLint id, GLint hwid);
+VBOXDUMPDECL(void) crRecRecompileShader(CR_RECORDER *pRec, CRContext *ctx, GLint id, GLint hwid);
+VBOXDUMPDECL(void) crRecRecompileProgram(CR_RECORDER *pRec, CRContext *ctx, GLint id, GLint hwid);
+VBOXDUMPDECL(void) crRecDumpCurrentProgram(CR_RECORDER *pRec, CRContext *ctx);
+VBOXDUMPDECL(void) crRecDumpProgramUniforms(CR_RECORDER *pRec, CRContext *ctx, GLint id, GLint hwid);
+VBOXDUMPDECL(void) crRecDumpCurrentProgramUniforms(CR_RECORDER *pRec, CRContext *ctx);
+VBOXDUMPDECL(void) crRecRecompileCurrentProgram(CR_RECORDER *pRec, CRContext *ctx);
+VBOXDUMPDECL(void) crRecDumpProgramAttribs(CR_RECORDER *pRec, CRContext *ctx, GLint id, GLint hwid);
+VBOXDUMPDECL(void) crRecDumpCurrentProgramAttribs(CR_RECORDER *pRec, CRContext *ctx);
+VBOXDUMPDECL(void) crRecDumpGlGetState(CR_RECORDER *pRec, CRContext *ctx);
+VBOXDUMPDECL(void) crRecDumpGlEnableState(CR_RECORDER *pRec, CRContext *ctx);
+VBOXDUMPDECL(void) crRecDumpVertAttrv(CR_RECORDER *pRec, CRContext *ctx, GLuint idx, const char*pszElFormat, uint32_t cbEl, const void *pvVal, uint32_t cVal);
+VBOXDUMPDECL(void) crRecDumpVertAttrF(CR_RECORDER *pRec, CRContext *ctx, const char*pszFormat, ...);
+VBOXDUMPDECL(void) crRecDumpVertAttrV(CR_RECORDER *pRec, CRContext *ctx, const char*pszFormat, va_list pArgList);
+VBOXDUMPDECL(void) crRecDumpTexParam(CR_RECORDER *pRec, CRContext *ctx, GLenum enmTarget);
+VBOXDUMPDECL(void) crRecDumpTexEnv(CR_RECORDER *pRec, CRContext *ctx);
+VBOXDUMPDECL(void) crRecDumpTexGen(CR_RECORDER *pRec, CRContext *ctx);
+
+VBOXDUMPDECL(int) crRecAlphaImgCreate(const CR_BLITTER_IMG *pImg, CR_BLITTER_IMG *pAlphaImg);
+VBOXDUMPDECL(void) crRecAlphaImgDestroy(CR_BLITTER_IMG *pImg);
+
+
+typedef DECLCALLBACKPTR(GLuint, PFNCRDUMPGETHWID)(void *pvObj);
+void* crDmpHashtableSearchByHwid(CRHashTable *pHash, GLuint hwid, PFNCRDUMPGETHWID pfnGetHwid, unsigned long *pKey);
+
+RT_C_DECLS_END
+
+#endif /* VBOX_WITH_CRDUMPER */
+/* */
+
+#endif /* #ifndef ___cr_dump_h__ */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_error.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_error.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_error.h	(revision 86648)
@@ -0,0 +1,67 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_ERROR_H
+#define CR_ERROR_H
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WARN
+# ifndef IN_RING0
+#  define LOG(_m) do { crDebug _m ; } while (0)
+#  define LOGREL(_m) do { crDebug _m ; } while (0)
+#  define WARN(_m) do { crWarning _m ; AssertMsgFailed(_m); } while (0)
+# else
+#  define LOG(_m) do { } while (0)
+#  define LOGREL(_m) do { } while (0)
+#  define WARN(_m) do { AssertMsgFailed(_m); } while (0)
+# endif
+#endif
+
+DECLEXPORT(void) crEnableWarnings(int onOff);
+
+DECLEXPORT(void) crDebug(const char *format, ... ) RT_IPRT_FORMAT_ATTR(1, 2);
+DECLEXPORT(void) crDbgCmdPrint(const char *description1, const char *description2, const char *cmd, ...);
+DECLEXPORT(void) crDbgCmdSymLoadPrint(const char *modName, const void*pvAddress);
+#if defined(DEBUG_misha) && defined(RT_OS_WINDOWS)
+typedef void FNCRDEBUG(const char *format, ... ) RT_IPRT_FORMAT_ATTR(1, 2);
+typedef FNCRDEBUG *PFNCRDEBUG;
+DECLINLINE(PFNCRDEBUG) crGetDebug() {return crDebug;}
+# define crWarning (RT_BREAKPOINT(), crDebug)
+#else
+DECLEXPORT(void) crWarning(const char *format, ... ) RT_IPRT_FORMAT_ATTR(1, 2);
+#endif
+DECLEXPORT(void) crInfo(const char *format, ... ) RT_IPRT_FORMAT_ATTR(1, 2);
+
+DECLEXPORT(void) crError(const char *format, ... ) RT_IPRT_FORMAT_ATTR(1, 2);
+
+/* Throw more info while opengl is not stable */
+#if defined(DEBUG) || 1
+# ifdef DEBUG_misha
+#  include <iprt/assert.h>
+#  define CRASSERT Assert
+/*extern int g_VBoxFbgFBreakDdi;*/
+#  define CR_DDI_PROLOGUE() do { /*if (g_VBoxFbgFBreakDdi) {Assert(0);}*/ } while (0)
+# else
+#  define CRASSERT( PRED ) ((PRED)?(void)0:crWarning( "Assertion failed: %s=%d, file %s, line %d", #PRED, (int)(intptr_t)(PRED), __FILE__, __LINE__))
+#  define CR_DDI_PROLOGUE() do {} while (0)
+# endif
+# define THREADASSERT( PRED ) ((PRED)?(void)0:crError( "Are you trying to run a threaded app ?\nBuild with 'make threadsafe'\nAssertion failed: %s, file %s, line %d", #PRED, __FILE__, __LINE__))
+#else
+# define CRASSERT( PRED ) ((void)0)
+# define THREADASSERT( PRED ) ((void)0)
+# define CR_DDI_PROLOGUE() do {} while (0)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_ERROR_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_extstring.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_extstring.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_extstring.h	(revision 86648)
@@ -0,0 +1,323 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_EXTSTRING_H
+#define CR_EXTSTRING_H
+
+#include "cr_version.h"
+
+/*
+ * This string is the list of OpenGL extensions which Chromium can understand
+ * (in the packer, unpacker, state-tracker, etc).
+ * In practice, this string will get intersected with what's reported by the
+ * rendering SPUs to reflect what we can really offer to client apps.
+ *
+ * Yes, we want static declarations here to avoid linking problems.
+ */
+static const char *crExtensions =
+#ifdef CR_EXT_texture_compression_s3tc
+    "GL_EXT_texture_compression_s3tc "
+#endif
+#ifdef CR_EXT_draw_range_elements
+    "GL_EXT_draw_range_elements "
+#endif
+#ifdef CR_EXT_framebuffer_object
+    "GL_EXT_framebuffer_object "
+#endif
+#ifdef CR_EXT_compiled_vertex_array
+    "GL_EXT_compiled_vertex_array "
+#endif
+#ifdef CR_ARB_depth_texture
+	"GL_ARB_depth_texture "
+#endif
+#ifdef CR_ARB_fragment_program
+	"GL_ARB_fragment_program "
+#endif
+#ifdef CR_ARB_imaging
+	"GL_ARB_imaging "
+#endif
+#ifdef CR_ARB_multisample
+	"GL_ARB_multisample "
+#endif
+#ifdef CR_ARB_multitexture
+	"GL_ARB_multitexture "
+#endif
+#ifdef CR_ARB_occlusion_query
+	"GL_ARB_occlusion_query "
+#endif
+#ifdef CR_ARB_point_parameters
+	"GL_ARB_point_parameters "
+#endif
+#ifdef CR_ARB_point_sprite
+	"GL_ARB_point_sprite "
+#endif
+#ifdef CR_ARB_shadow
+	"GL_ARB_shadow "
+#endif
+#ifdef CR_ARB_shadow_ambient
+	"GL_ARB_shadow_ambient "
+#endif
+#ifdef CR_ARB_texture_border_clamp
+	"GL_ARB_texture_border_clamp "
+#endif
+#ifdef CR_ARB_texture_compression
+	"GL_ARB_texture_compression "
+#endif
+#ifdef CR_ARB_texture_cube_map
+	"GL_ARB_texture_cube_map "
+#endif
+#ifdef CR_ARB_texture_env_add
+	"GL_ARB_texture_env_add "
+#endif
+#ifdef CR_ARB_texture_env_combine
+	"GL_ARB_texture_env_combine GL_EXT_texture_env_combine "
+#endif
+#ifdef CR_ARB_texture_env_crossbar
+	"GL_ARB_texture_env_crossbar "
+#endif
+#ifdef CR_ARB_texture_env_dot3
+	"GL_ARB_texture_env_dot3 GL_EXT_texture_env_dot3 "
+#endif
+#ifdef CR_ARB_texture_mirrored_repeat
+	"GL_ARB_texture_mirrored_repeat GL_IBM_texture_mirrored_repeat "
+#endif
+#ifdef CR_ATI_texture_mirror_once
+	"GL_ATI_texture_mirror_once "
+#endif
+#ifdef CR_ARB_texture_non_power_of_two
+	"GL_ARB_texture_non_power_of_two "
+#endif
+#ifdef CR_ARB_transpose_matrix
+	"GL_ARB_transpose_matrix "
+#endif
+#ifdef CR_ARB_vertex_buffer_object
+	"GL_ARB_vertex_buffer_object "
+#endif
+#ifdef CR_ARB_pixel_buffer_object
+    "GL_ARB_pixel_buffer_object "
+#endif
+#ifdef CR_ARB_vertex_program
+	"GL_ARB_vertex_program "
+#endif
+#ifdef CR_ARB_window_pos
+	"GL_ARB_window_pos "
+#endif
+#ifdef CR_EXT_blend_color
+	"GL_EXT_blend_color "
+#endif
+#ifdef CR_EXT_blend_minmax
+	"GL_EXT_blend_minmax "
+#endif
+#ifdef CR_EXT_blend_func_separate
+	"GL_EXT_blend_func_separate "
+#endif
+#ifdef CR_EXT_clip_volume_hint
+	"GL_EXT_clip_volume_hint "
+#endif
+#ifdef CR_EXT_blend_logic_op
+	"GL_EXT_blend_logic_op "
+#endif
+#ifdef CR_EXT_blend_subtract
+	"GL_EXT_blend_subtract "
+#endif
+#ifdef CR_EXT_texture_env_add
+	"GL_EXT_texture_env_add "
+#endif
+#ifdef CR_EXT_fog_coord
+	"GL_EXT_fog_coord "
+#endif
+#ifdef CR_EXT_multi_draw_arrays
+	"GL_EXT_multi_draw_arrays "
+#endif
+#ifdef CR_EXT_secondary_color
+	"GL_EXT_secondary_color "
+#endif
+#ifdef CR_EXT_separate_specular_color
+	"GL_EXT_separate_specular_color "
+#endif
+#ifdef CR_EXT_shadow_funcs
+	"GL_EXT_shadow_funcs "
+#endif
+#ifdef CR_EXT_stencil_wrap
+	"GL_EXT_stencil_wrap "
+#endif
+#ifdef CR_EXT_texture_cube_map
+	"GL_EXT_texture_cube_map "
+#endif
+#ifdef CR_EXT_texture_edge_clamp
+	"GL_EXT_texture_edge_clamp "
+#endif
+#ifdef CR_EXT_texture_filter_anisotropic
+	"GL_EXT_texture_filter_anisotropic "
+#endif
+#ifdef CR_EXT_texture_lod_bias
+	"GL_EXT_texture_lod_bias "
+#endif
+#ifdef CR_EXT_texture_object
+	"GL_EXT_texture_object "
+#endif
+#ifdef CR_EXT_texture3D
+	"GL_EXT_texture3D "
+#endif
+#ifdef CR_IBM_rasterpos_clip
+	"GL_IBM_rasterpos_clip "
+#endif
+#ifdef CR_NV_fog_distance
+	"GL_NV_fog_distance "
+#endif
+#ifdef CR_NV_fragment_program
+	"GL_NV_fragment_program "
+#endif
+#ifdef CR_NV_fragment_program_option
+    "GL_NV_fragment_program_option "
+#endif
+#ifdef CR_NV_fragment_program2
+    "GL_NV_fragment_program2 "
+#endif
+#ifdef CR_NV_register_combiners
+	"GL_NV_register_combiners "
+#endif
+#ifdef CR_NV_register_combiners2
+	"GL_NV_register_combiners2 "
+#endif
+#ifdef CR_NV_texgen_reflection
+	"GL_NV_texgen_reflection "
+#endif
+#ifdef CR_NV_texture_rectangle
+	"GL_NV_texture_rectangle GL_EXT_texture_rectangle GL_ARB_texture_rectangle "
+#endif
+#ifdef CR_NV_vertex_program
+	"GL_NV_vertex_program "
+#endif
+#ifdef CR_NV_vertex_program1_1
+	"GL_NV_vertex_program1_1 "
+#endif
+#ifdef CR_NV_vertex_program2
+	"GL_NV_vertex_program2 "
+#endif
+#ifdef CR_NV_vertex_program2_option
+    "GL_NV_vertex_program2_option "
+#endif
+#ifdef CR_NV_vertex_program3
+    "GL_NV_vertex_program3 "
+#endif
+#ifdef CR_SGIS_generate_mipmap
+	"GL_SGIS_generate_mipmap "
+#endif
+#ifdef CR_SGIS_texture_border_clamp
+	"GL_SGIS_texture_border_clamp "
+#endif
+#ifdef CR_SGIS_texture_edge_clamp
+	"GL_SGIS_texture_edge_clamp "
+#endif
+#ifdef CR_ARB_shading_language_100
+    "GL_ARB_shading_language_100 "
+#endif
+#ifdef CR_ARB_shader_objects
+    "GL_ARB_shader_objects "
+#endif
+#ifdef CR_ARB_vertex_shader
+    "GL_ARB_vertex_shader "
+#endif
+#ifdef CR_ARB_fragment_shader
+    "GL_ARB_fragment_shader "
+#endif
+#ifdef CR_EXT_texture_sRGB
+    "GL_EXT_texture_sRGB "
+#endif
+#ifdef CR_EXT_framebuffer_blit
+    "GL_EXT_framebuffer_blit "
+#endif
+#ifdef CR_EXT_blend_equation_separate
+    "GL_EXT_blend_equation_separate "
+#endif
+#ifdef CR_EXT_stencil_two_side
+    "GL_EXT_stencil_two_side "
+#endif
+#ifdef CR_GREMEDY_string_marker
+    "GL_GREMEDY_string_marker "
+#endif
+#ifdef CR_ARB_texture_float
+    "GL_ARB_texture_float "
+#endif
+#ifdef CR_ARB_draw_buffers
+    "GL_ARB_draw_buffers "
+#endif
+#ifdef CR_ARB_shader_texture_lod
+    "GL_ARB_shader_texture_lod "
+#endif
+
+	"";
+
+/*
+ * Extensions which are only supported if the render/readback SPU is
+ * on the app node (no packing/unpacking/state-tracking support).
+ */
+static const char *crAppOnlyExtensions =
+  "GL_NV_fence " \
+  "GL_NV_texture_env_combine4 " \
+  "GL_NV_texture_shader " \
+  "GL_NV_vertex_array_range "
+;
+
+
+/*
+ * Special extensions which are unique to Chromium.
+ * We typically append this to the result of glGetString(GL_EXTENSIONS).
+ */
+static const char *crChromiumExtensions =
+#ifdef GL_CR_state_parameter
+	"GL_CR_state_parameter "
+#endif
+#ifdef GL_CR_cursor_position
+	"GL_CR_cursor_position "
+#endif
+#ifdef GL_CR_bounding_box
+	"GL_CR_bounding_box "
+#endif
+#ifdef GL_CR_print_string
+	"GL_CR_print_string "
+#endif
+#ifdef GL_CR_tilesort_info
+	"GL_CR_tilesort_info "
+#endif
+#ifdef GL_CR_client_clear_control
+	"GL_CR_client_clear_control "
+#endif
+#ifdef GL_CR_synchronization
+	"GL_CR_synchronization "
+#endif
+#ifdef GL_CR_head_spu_name
+	"GL_CR_head_spu_name "
+#endif
+#ifdef GL_CR_performance_info
+	"GL_CR_performance_info "
+#endif
+#ifdef GL_CR_window_size
+	"GL_CR_window_size "
+#endif
+#ifdef GL_CR_tile_info
+	"GL_CR_tile_info "
+#endif
+#ifdef GL_CR_saveframe
+	"GL_CR_saveframe "
+#endif
+#ifdef GL_CR_readback_barrier_size
+	"GL_CR_readback_barrier_size "
+#endif
+#ifdef GL_CR_server_id_sharing
+	"GL_CR_server_id_sharing "
+#endif
+#ifdef GL_CR_server_matrix
+	"GL_CR_server_matrix "
+#endif
+#ifdef USE_DMX
+	"GL_CR_dmx "
+#endif
+	"";
+
+#endif /* CR_EXTSTRING_H */
+
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_glext.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_glext.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_glext.h	(revision 86648)
@@ -0,0 +1,34 @@
+/* $Id$ */
+
+/** @file
+ * GL chromium platform specifics
+ */
+/*
+ * Copyright (C) 2014-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+#ifndef ___cr_glext_h__
+#define ___cr_glext_h__
+
+#include <iprt/assert.h>
+
+#ifndef __glext_h_
+/* glext NOT included yet */
+# include "GL/glext.h"
+#else
+/* glext IS included yet */
+# ifndef RT_OS_DARWIN
+typedef unsigned int VBoxGLhandleARB;   /* shader object handle */
+AssertCompile(sizeof (VBoxGLhandleARB) == sizeof (GLhandleARB));
+# else
+#  error "patched glext is required for OSX!"
+# endif
+#endif
+#endif /*___cr_glext_h__*/
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_glstate.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_glstate.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_glstate.h	(revision 86648)
@@ -0,0 +1,339 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_GLSTATE_H
+#define CR_GLSTATE_H
+
+/* Forward declaration since some of the state/cr_*.h files need the CRContext type */
+struct CRContext;
+typedef struct CRContext CRContext;
+
+#include "cr_version.h"
+
+#include "state/cr_buffer.h"
+#include "state/cr_bufferobject.h"
+#include "state/cr_client.h"
+#include "state/cr_current.h"
+#include "state/cr_evaluators.h"
+#include "state/cr_feedback.h"
+#include "state/cr_fog.h"
+#include "state/cr_hint.h"
+#include "state/cr_lighting.h"
+#include "state/cr_limits.h"
+#include "state/cr_line.h"
+#include "state/cr_lists.h"
+#include "state/cr_multisample.h"
+#include "state/cr_occlude.h"
+#include "state/cr_pixel.h"
+#include "state/cr_point.h"
+#include "state/cr_polygon.h"
+#include "state/cr_program.h"
+#include "state/cr_regcombiner.h"
+#include "state/cr_stencil.h"
+#include "state/cr_texture.h"
+#include "state/cr_transform.h"
+#include "state/cr_viewport.h"
+#include "state/cr_attrib.h"
+#include "state/cr_framebuffer.h"
+#include "state/cr_glsl.h"
+
+#include "state/cr_statefuncs.h"
+#include "state/cr_stateerror.h"
+
+#include "spu_dispatch_table.h"
+
+#include "cr_threads.h"
+
+#include <iprt/cdefs.h>
+
+# include <VBox/vmm/ssm.h>
+# include <iprt/asm.h>
+
+# define CR_STATE_SHAREDOBJ_USAGE_INIT(_pObj) (crMemset((_pObj)->ctxUsage, 0, sizeof ((_pObj)->ctxUsage)))
+# define CR_STATE_SHAREDOBJ_USAGE_SET(_pObj, _pCtx) (ASMBitSet((_pObj)->ctxUsage, (_pCtx)->id))
+# define CR_STATE_SHAREDOBJ_USAGE_IS_SET(_pObj, _pCtx) (ASMBitTest((_pObj)->ctxUsage, (_pCtx)->id))
+# define CR_STATE_SHAREDOBJ_USAGE_CLEAR_IDX(_pObj, _i) (ASMBitClear((_pObj)->ctxUsage, (_i)))
+# define CR_STATE_SHAREDOBJ_USAGE_CLEAR(_pObj, _pCtx) (CR_STATE_SHAREDOBJ_USAGE_CLEAR_IDX((_pObj), (_pCtx)->id))
+# define CR_STATE_SHAREDOBJ_USAGE_IS_USED(_pObj) (ASMBitFirstSet((_pObj)->ctxUsage, sizeof ((_pObj)->ctxUsage)<<3) >= 0)
+# define CR_STATE_SHAREDOBJ_USAGE_GET_FIRST_USED_IDX(_pObj) (ASMBitFirstSet((_pObj)->ctxUsage, sizeof ((_pObj)->ctxUsage)<<3))
+# define CR_STATE_SHAREDOBJ_USAGE_GET_NEXT_USED_IDX(_pObj, _i) (ASMBitNextSet((_pObj)->ctxUsage, sizeof ((_pObj)->ctxUsage)<<3, (_i)))
+
+# define CR_STATE_SHAREDOBJ_USAGE_FOREACH_USED_IDX(_pObj, _i) for ((_i) = CR_STATE_SHAREDOBJ_USAGE_GET_FIRST_USED_IDX(_pObj); ((int)(_i)) >= 0; (_i) = CR_STATE_SHAREDOBJ_USAGE_GET_NEXT_USED_IDX((_pObj), ((int)(_i))))
+
+#define CR_MAX_EXTENTS 256
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Bit vectors describing GL state
+ */
+typedef struct {
+    CRAttribBits      attrib;
+    CRBufferBits      buffer;
+#ifdef CR_ARB_vertex_buffer_object
+    CRBufferObjectBits bufferobject;
+#endif
+    CRClientBits      client;
+    CRCurrentBits     current;
+    CREvaluatorBits   eval;
+    CRFeedbackBits    feedback;
+    CRFogBits         fog;
+    CRHintBits        hint;
+    CRLightingBits    lighting;
+    CRLineBits        line;
+    CRListsBits       lists;
+    CRMultisampleBits multisample;
+#if CR_ARB_occlusion_query
+    CROcclusionBits   occlusion;
+#endif
+    CRPixelBits       pixel;
+    CRPointBits       point;
+    CRPolygonBits     polygon;
+    CRProgramBits     program;
+    CRRegCombinerBits regcombiner;
+    CRSelectionBits   selection;
+    CRStencilBits     stencil;
+    CRTextureBits     texture;
+    CRTransformBits   transform;
+    CRViewportBits    viewport;
+} CRStateBits;
+
+typedef void (*CRStateFlushFunc)( void *arg );
+
+
+typedef struct _CRSharedState {
+    CRHashTable *textureTable;  /* all texture objects */
+    CRHashTable *dlistTable;    /* all display lists */
+    CRHashTable *buffersTable;  /* vbo/pbo */
+    CRHashTable *fbTable;       /* frame buffers */
+    CRHashTable *rbTable;       /* render buffers */
+
+    volatile int32_t refCount;
+    GLint id;                   /*unique shared state id, it's not always matching some existing context id!*/
+    GLint saveCount;
+
+    /* Indicates that we have to resend data to GPU on first glMakeCurrent call with owning context */
+    GLboolean   bTexResyncNeeded;
+    GLboolean   bVBOResyncNeeded;
+    GLboolean   bFBOResyncNeeded;
+} CRSharedState;
+
+/**
+ * Chromium version of the state variables in OpenGL
+ */
+struct CRContext {
+    int id;
+
+    /* we keep reference counting of context's makeCurrent for different threads
+     * this is primarily needed to avoid having an invalid memory reference in the TLS
+     * when the context is assigned to more than one threads and then destroyed from
+     * one of those, i.e.
+     * 1. Thread1 -> MakeCurrent(ctx1);
+     * 2. Thread2 -> MakeCurrent(ctx1);
+     * 3. Thread1 -> Destroy(ctx1);
+     * => Thread2 still refers to destroyed ctx1
+     * */
+    VBOXTLSREFDATA
+
+    CRbitvalue bitid[CR_MAX_BITARRAY];
+    CRbitvalue neg_bitid[CR_MAX_BITARRAY];
+
+    CRSharedState *shared;
+
+    GLenum     renderMode;
+
+    GLenum     error;
+
+    CRStateFlushFunc flush_func;
+    void            *flush_arg;
+
+    CRAttribState      attrib;
+    CRBufferState      buffer;
+#ifdef CR_ARB_vertex_buffer_object
+    CRBufferObjectState bufferobject;
+#endif
+    CRClientState      client;
+    CRCurrentState     current;
+    CREvaluatorState   eval;
+    CRExtensionState   extensions;
+    CRFeedbackState    feedback;
+    CRFogState         fog;
+    CRHintState        hint;
+    CRLightingState    lighting;
+    CRLimitsState      limits;
+    CRLineState        line;
+    CRListsState       lists;
+    CRMultisampleState multisample;
+#if CR_ARB_occlusion_query
+    CROcclusionState   occlusion;
+#endif
+    CRPixelState       pixel;
+    CRPointState       point;
+    CRPolygonState     polygon;
+    CRProgramState     program;
+    CRRegCombinerState regcombiner;
+    CRSelectionState   selection;
+    CRStencilState     stencil;
+    CRTextureState     texture;
+    CRTransformState   transform;
+    CRViewportState    viewport;
+
+#ifdef CR_EXT_framebuffer_object
+    CRFramebufferObjectState    framebufferobject;
+#endif
+
+#ifdef CR_OPENGL_VERSION_2_0
+    CRGLSLState        glsl;
+#endif
+
+    /** The state tracker the context is attached to. */
+    PCRStateTracker    pStateTracker;
+
+    /** For buffering vertices for selection/feedback */
+    /*@{*/
+    GLuint    vCount;
+    CRVertex  vBuffer[4];
+    GLboolean lineReset;
+    GLboolean lineLoop;
+    /*@}*/
+};
+
+
+/**
+ * CR state tracker.
+ */
+typedef struct CRStateTracker
+{
+    bool             fContextTLSInit;
+    CRtsd            contextTSD;
+    CRStateBits      *pCurrentBits;
+    CRContext        *apAvailableContexts[CR_MAX_CONTEXTS];
+    uint32_t         cContexts;
+    CRSharedState    *pSharedState;
+    CRContext        *pDefaultContext;
+    GLboolean        fVBoxEnableDiffOnMakeCurrent;
+    SPUDispatchTable diff_api;
+} CRStateTracker;
+
+DECLEXPORT(void) crStateInit(PCRStateTracker pState);
+DECLEXPORT(void) crStateDestroy(PCRStateTracker pState);
+DECLEXPORT(void) crStateVBoxDetachThread(PCRStateTracker pState);
+DECLEXPORT(void) crStateVBoxAttachThread(PCRStateTracker pState);
+DECLEXPORT(CRContext *) crStateCreateContext(PCRStateTracker pState, const CRLimitsState *limits, GLint visBits, CRContext *share);
+DECLEXPORT(CRContext *) crStateCreateContextEx(PCRStateTracker pState, const CRLimitsState *limits, GLint visBits, CRContext *share, GLint presetID);
+DECLEXPORT(void) crStateMakeCurrent(PCRStateTracker pState, CRContext *ctx);
+DECLEXPORT(void) crStateSetCurrent(PCRStateTracker pState, CRContext *ctx);
+DECLEXPORT(void) crStateCleanupCurrent(PCRStateTracker pState);
+DECLEXPORT(CRContext *) crStateGetCurrent(PCRStateTracker pState);
+DECLEXPORT(void) crStateDestroyContext(PCRStateTracker pState, CRContext *ctx);
+DECLEXPORT(GLboolean) crStateEnableDiffOnMakeCurrent(PCRStateTracker pState, GLboolean fEnable);
+
+void crStateSwitchPrepare(CRContext *toCtx, CRContext *fromCtx, GLuint idDrawFBO, GLuint idReadFBO);
+void crStateSwitchPostprocess(CRContext *toCtx, CRContext *fromCtx, GLuint idDrawFBO, GLuint idReadFBO);
+
+void crStateSyncHWErrorState(CRContext *ctx);
+GLenum crStateCleanHWErrorState(PCRStateTracker pState);
+
+#define CR_STATE_CLEAN_HW_ERR_WARN(a_pState, _s) do {\
+            GLenum _err = crStateCleanHWErrorState((a_pState)); \
+            if (_err != GL_NO_ERROR) { \
+                static int _cErrPrints = 0; \
+                if (_cErrPrints < 5) { \
+                    ++_cErrPrints; \
+                    WARN(("%s %#x, ignoring.. (%d out of 5)", _s, _err, _cErrPrints)); \
+                } \
+            } \
+        } while (0)
+
+DECLEXPORT(void) crStateFlushFunc(PCRStateTracker pState, CRStateFlushFunc ff);
+DECLEXPORT(void) crStateFlushArg(PCRStateTracker pState, void *arg );
+DECLEXPORT(void) crStateDiffAPI(PCRStateTracker pState, SPUDispatchTable *api);
+DECLEXPORT(void) crStateUpdateColorBits(PCRStateTracker pState);
+
+DECLEXPORT(void) crStateSetCurrentPointers(CRContext *ctx, CRCurrentStatePointers *current);
+DECLEXPORT(void) crStateResetCurrentPointers(CRCurrentStatePointers *current);
+
+DECLEXPORT(void) crStateSetExtensionString(CRContext *ctx, const GLubyte *extensions);
+
+DECLEXPORT(void) crStateDiffContext(CRContext *from, CRContext *to);
+DECLEXPORT(void) crStateSwitchContext(CRContext *from, CRContext *to);
+
+DECLEXPORT(unsigned int) crStateHlpComponentsCount(GLenum pname);
+
+typedef struct CRFBDataElement
+{
+    /* FBO, can be NULL */
+    GLint idFBO;
+    /* to be used for glDraw/ReadBuffer, i.e. GL_FRONT, GL_BACK, GL_COLOR_ATTACHMENTX */
+    GLenum enmBuffer;
+    GLint posX;
+    GLint posY;
+    GLint width;
+    GLint height;
+    GLenum enmFormat;
+    GLenum enmType;
+    GLuint cbData;
+    GLvoid *pvData;
+} CRFBDataElement;
+
+typedef struct CRFBData
+{
+    /* override default draw and read buffers to be used for offscreen rendering */
+    GLint idOverrrideFBO;
+    uint32_t u32Version;
+    uint32_t cElements;
+    CRFBDataElement aElements[1];
+} CRFBData;
+
+DECLEXPORT(void) crStateApplyFBImage(CRContext *to, CRFBData *data);
+DECLEXPORT(int) crStateAcquireFBImage(CRContext *to, CRFBData *data);
+DECLEXPORT(void) crStateFreeFBImageLegacy(CRContext *to);
+
+DECLEXPORT(void) crStateGetTextureObjectAndImage(CRContext *g, GLenum texTarget, GLint level,
+                                                 CRTextureObj **obj, CRTextureLevel **img);
+
+
+DECLEXPORT(void) crStateReleaseTexture(CRContext *pCtx, CRTextureObj *pObj);
+
+#ifndef IN_GUEST
+DECLEXPORT(int32_t) crStateSaveContext(CRContext *pContext, PSSMHANDLE pSSM);
+typedef DECLCALLBACK(CRContext*) FNCRSTATE_CONTEXT_GET(void*);
+typedef FNCRSTATE_CONTEXT_GET *PFNCRSTATE_CONTEXT_GET;
+DECLEXPORT(int32_t) crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRSTATE_CONTEXT_GET pfnCtxGet, PSSMHANDLE pSSM, uint32_t u32Version);
+DECLEXPORT(void) crStateFreeShared(PCRStateTracker pState, CRContext *pContext, CRSharedState *s);
+
+DECLEXPORT(int32_t) crStateLoadGlobals(PCRStateTracker pState, PSSMHANDLE pSSM, uint32_t u32Version);
+DECLEXPORT(int32_t) crStateSaveGlobals(PCRStateTracker pState, PSSMHANDLE pSSM);
+
+DECLEXPORT(CRSharedState *) crStateGlobalSharedAcquire(PCRStateTracker pState);
+DECLEXPORT(void) crStateGlobalSharedRelease(PCRStateTracker pState);
+#endif
+
+DECLEXPORT(void) crStateSetTextureUsed(PCRStateTracker pState, GLuint texture, GLboolean used);
+DECLEXPORT(void) crStatePinTexture(PCRStateTracker pState, GLuint texture, GLboolean pin);
+DECLEXPORT(void) crStateDeleteTextureCallback(void *texObj, void *pvUser);
+
+   /* XXX move these! */
+
+DECLEXPORT(void) STATE_APIENTRY crStateChromiumParameteriCR(PCRStateTracker pState, GLenum target, GLint value );
+DECLEXPORT(void) STATE_APIENTRY crStateChromiumParameterfCR(PCRStateTracker pState, GLenum target, GLfloat value );
+DECLEXPORT(void) STATE_APIENTRY crStateChromiumParametervCR(PCRStateTracker pState, GLenum target, GLenum type, GLsizei count, const GLvoid *values );
+DECLEXPORT(void) STATE_APIENTRY crStateGetChromiumParametervCR(PCRStateTracker pState, GLenum target, GLuint index, GLenum type,
+                                                               GLsizei count, GLvoid *values );
+DECLEXPORT(void) STATE_APIENTRY crStateReadPixels(PCRStateTracker pState, GLint x, GLint y, GLsizei width, GLsizei height,
+                                                  GLenum format, GLenum type, GLvoid *pixels );
+DECLEXPORT(void) STATE_APIENTRY crStateShareContext(PCRStateTracker pState, GLboolean value);
+DECLEXPORT(void) STATE_APIENTRY crStateShareLists(CRContext *pContext1, CRContext *pContext2);
+DECLEXPORT(void) STATE_APIENTRY crStateSetSharedContext(CRContext *pCtx);
+DECLEXPORT(GLboolean) STATE_APIENTRY crStateContextIsShared(CRContext *pCtx);
+DECLEXPORT(void) STATE_APIENTRY crStateQueryHWState(PCRStateTracker pState, GLuint fbFbo, GLuint bbFbo);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_GLSTATE_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_hash.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_hash.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_hash.h	(revision 86648)
@@ -0,0 +1,70 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_HASH_H
+#define CR_HASH_H
+
+#include "chromium.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct CRHashIdPool CRHashIdPool;
+typedef struct CRHashTable CRHashTable;
+
+/* Callback function used for freeing/deleting table entries */
+typedef void (*CRHashtableCallback)(void *data);
+typedef void (*CRHashtableCallbackEx)(void *data1, void *data2);
+/* Callback function used for walking through table entries */
+typedef void (*CRHashtableWalkCallback)(unsigned long key, void *data1, void *data2);
+/* Callback function used for walking through allocated keys */
+typedef void (*CRHashIdWalkKeys)(unsigned long firstKey, unsigned long count, void *data);
+
+DECLEXPORT(CRHashIdPool *) crAllocHashIdPool( void );
+DECLEXPORT(CRHashIdPool *) crAllocHashIdPoolEx( GLuint min, GLuint max );
+DECLEXPORT(void) crFreeHashIdPool( CRHashIdPool *pool );
+DECLEXPORT(GLboolean) crHashIdPoolIsIdFree( const CRHashIdPool *pool, GLuint id );
+DECLEXPORT(GLuint) crHashIdPoolAllocBlock( CRHashIdPool *pool, GLuint count );
+DECLEXPORT(void) crHashIdPoolFreeBlock( CRHashIdPool *pool, GLuint first, GLuint count );
+/* @return GL_TRUE if the id is allocated, and GL_FALSE if the id was already allocated */
+DECLEXPORT(GLboolean) crHashIdPoolAllocId( CRHashIdPool *pool, GLuint id );
+DECLEXPORT(void) crHashIdWalkKeys( CRHashIdPool *pool, CRHashIdWalkKeys walkFunc , void *data);
+
+DECLEXPORT(CRHashTable *) crAllocHashtable( void );
+DECLEXPORT(CRHashTable *) crAllocHashtableEx( GLuint min, GLuint max );
+DECLEXPORT(void) crFreeHashtable( CRHashTable *hash, CRHashtableCallback deleteCallback );
+DECLEXPORT(void) crFreeHashtableEx( CRHashTable *hash, CRHashtableCallbackEx deleteCallback, void *pData );
+DECLEXPORT(void) crHashtableAdd( CRHashTable *h, unsigned long key, void *data );
+/* to ensure hash table pool id consistency, there is no crHashTableFreeKeys/UnregisterKey,
+ * one should call crHashtableDelete to free unneeded keys, 
+ * which will also ensure there is no entry with the specified key left in the table */
+DECLEXPORT(GLuint) crHashtableAllocKeys( CRHashTable *h, GLsizei range );
+/* @return GL_TRUE if the id is allocated, and GL_FALSE if the id was already allocated */
+DECLEXPORT(GLboolean) crHashtableAllocRegisterKey( CRHashTable *h,  GLuint key);
+DECLEXPORT(void) crHashtableDelete( CRHashTable *h, unsigned long key, CRHashtableCallback deleteCallback );
+DECLEXPORT(void) crHashtableDeleteEx( CRHashTable *h, unsigned long key, CRHashtableCallbackEx deleteCallback, void *pData );
+DECLEXPORT(void) crHashtableDeleteBlock( CRHashTable *h, unsigned long key, GLsizei range, CRHashtableCallback deleteFunc );
+DECLEXPORT(void *) crHashtableSearch( const CRHashTable *h, unsigned long key );
+DECLEXPORT(void) crHashtableReplace( CRHashTable *h, unsigned long key, void *data, CRHashtableCallback deleteFunc);
+DECLEXPORT(unsigned int) crHashtableNumElements( const CRHashTable *h) ;
+DECLEXPORT(GLboolean) crHashtableIsKeyUsed( const CRHashTable *h, GLuint id );
+DECLEXPORT(void) crHashtableWalk( CRHashTable *hash, CRHashtableWalkCallback walkFunc , void *data);
+/* walk the hashtable w/o holding the table lock */
+DECLEXPORT(void) crHashtableWalkUnlocked( CRHashTable *hash, CRHashtableWalkCallback walkFunc , void *data);
+/*Returns GL_TRUE if given hashtable hold the data, pKey is updated with key value for data in this case*/
+DECLEXPORT(GLboolean) crHashtableGetDataKey(CRHashTable *pHash, void *pData, unsigned long *pKey);
+DECLEXPORT(void) crHashtableLock(CRHashTable *h);
+DECLEXPORT(void) crHashtableUnlock(CRHashTable *h);
+DECLEXPORT(void) crHashtableWalkKeys(CRHashTable *hash, CRHashIdWalkKeys walkFunc , void *data);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* CR_HASH_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_htable.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_htable.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_htable.h	(revision 86648)
@@ -0,0 +1,74 @@
+/* $Id$ */
+
+/** @file
+ * uint32_t handle to void simple table API
+ */
+
+/*
+ * Copyright (C) 2013-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+#ifndef ___cr_htable_h_
+#define ___cr_htable_h_
+
+#include <iprt/types.h>
+#include <iprt/cdefs.h>
+
+#include <cr_error.h>
+
+#ifndef IN_RING0
+# define VBOXHTABLEDECL(_type) DECLEXPORT(_type)
+#else
+# define VBOXHTABLEDECL(_type) RTDECL(_type)
+#endif
+
+
+
+RT_C_DECLS_BEGIN
+
+typedef uint32_t CRHTABLE_HANDLE;
+#define CRHTABLE_HANDLE_INVALID 0UL
+
+typedef struct CRHTABLE
+{
+    uint32_t cData;
+    uint32_t iNext2Search;
+    uint32_t cSize;
+    void **paData;
+} CRHTABLE, *PCRHTABLE;
+
+/*private stuff, not to be used directly */
+DECLINLINE(CRHTABLE_HANDLE) crHTableIndex2Handle(uint32_t iIndex)
+{
+    return iIndex+1;
+}
+
+DECLINLINE(uint32_t) crHTableHandle2Index(CRHTABLE_HANDLE hHandle)
+{
+    return hHandle-1;
+}
+
+VBOXHTABLEDECL(int) CrHTableCreate(PCRHTABLE pTbl, uint32_t cSize);
+DECLINLINE(void) CrHTableMoveTo(PCRHTABLE pSrcTbl, PCRHTABLE pDstTbl)
+{
+    *pDstTbl = *pSrcTbl;
+    CrHTableCreate(pSrcTbl, 0);
+}
+VBOXHTABLEDECL(void) CrHTableEmpty(PCRHTABLE pTbl);
+VBOXHTABLEDECL(void) CrHTableDestroy(PCRHTABLE pTbl);
+VBOXHTABLEDECL(int) CrHTableRealloc(PCRHTABLE pTbl, uint32_t cNewSize);
+VBOXHTABLEDECL(CRHTABLE_HANDLE) CrHTablePut(PCRHTABLE pTbl, void *pvData);
+VBOXHTABLEDECL(int) CrHTablePutToSlot(PCRHTABLE pTbl, CRHTABLE_HANDLE hHandle, void* pvData);
+VBOXHTABLEDECL(void*) CrHTableRemove(PCRHTABLE pTbl, CRHTABLE_HANDLE hHandle);
+VBOXHTABLEDECL(void*) CrHTableGet(PCRHTABLE pTbl, CRHTABLE_HANDLE hHandle);
+
+RT_C_DECLS_END
+
+#endif /* #ifndef ___cr_htable_h_*/
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_matrix.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_matrix.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_matrix.h	(revision 86648)
@@ -0,0 +1,96 @@
+
+#ifndef CR_MATRIX_H
+#define CR_MATRIX_H
+
+#include "chromium.h"
+
+#include <iprt/cdefs.h>
+
+/*
+ * Note: m[col][row] matches OpenGL's column-major memory layout
+ */
+typedef struct {
+	float m00, m01, m02, m03;
+	float m10, m11, m12, m13;
+	float m20, m21, m22, m23;
+	float m30, m31, m32, m33;
+} CRmatrix;
+
+typedef struct { GLfloat x,y,z,w; } GLvectorf;
+typedef struct { GLdouble x,y,z,w; } GLvectord;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern DECLEXPORT(void)
+crMatrixInit(CRmatrix *m);
+
+extern DECLEXPORT(void)
+crMatrixInitFromString(CRmatrix *m, const char *s);
+
+extern DECLEXPORT(void)
+crMatrixInitFromFloats(CRmatrix *m, const float *v);
+
+extern DECLEXPORT(void)
+crMatrixInitFromDoubles(CRmatrix *m, const double *v);
+
+extern DECLEXPORT(void)
+crMatrixPrint(const char *msg, const CRmatrix *m);
+
+extern DECLEXPORT(void)
+crMatrixGetFloats(float *values, const CRmatrix *m);
+
+extern DECLEXPORT(int)
+crMatrixIsEqual(const CRmatrix *m, const CRmatrix *n);
+
+extern DECLEXPORT(int)
+crMatrixIsIdentity(const CRmatrix *m);
+
+extern DECLEXPORT(int)
+crMatrixIsOrthographic(const CRmatrix *m);
+
+extern DECLEXPORT(void)
+crMatrixCopy(CRmatrix *dest, const CRmatrix *src);
+
+extern DECLEXPORT(void)
+crMatrixMultiply(CRmatrix *p, const CRmatrix *a, const CRmatrix *b);
+
+extern DECLEXPORT(void)
+crMatrixTransformPointf(const CRmatrix *m, GLvectorf *p);
+
+extern DECLEXPORT(void)
+crMatrixTransformPointd(const CRmatrix *m, GLvectord *p);
+
+extern DECLEXPORT(void)
+crMatrixInvertTranspose(CRmatrix *inv, const CRmatrix *mat);
+
+extern DECLEXPORT(void)
+crMatrixTranspose(CRmatrix *t, const CRmatrix *m);
+
+extern DECLEXPORT(void)
+crMatrixTranslate(CRmatrix *m, float x, float y, float z);
+
+extern DECLEXPORT(void)
+crMatrixRotate(CRmatrix *m, float angle, float x, float y, float z);
+
+extern DECLEXPORT(void)
+crMatrixScale(CRmatrix *m, float x, float y, float z);
+
+extern DECLEXPORT(void)
+crMatrixFrustum(CRmatrix *m,
+								float left, float right,
+								float bottom, float top, 
+								float zNear, float zFar);
+
+extern DECLEXPORT(void)
+crMatrixOrtho(CRmatrix *m,
+							float left, float right,
+							float bottom, float top,
+							float znear, float zfar);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_mem.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_mem.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_mem.h	(revision 86648)
@@ -0,0 +1,56 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_MEM_H
+#define CR_MEM_H
+
+#include "cr_error.h"
+
+#include <stdlib.h>
+#include <iprt/types.h>
+#include <iprt/mem.h>
+#include <iprt/string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DECLINLINE(void) crMemcpy( void *dst, const void *src, unsigned int bytes )
+{
+	CRASSERT(dst || 0==bytes);
+	CRASSERT(src || 0==bytes);
+	(void) memcpy( dst, src, bytes );
+}
+
+DECLINLINE(void) crMemset( void *ptr, int value, unsigned int bytes )
+{
+	CRASSERT(ptr);
+	memset( ptr, value, bytes );
+}
+
+DECLINLINE(void) crMemZero( void *ptr, unsigned int bytes )
+{
+	CRASSERT(ptr);
+	memset( ptr, 0, bytes );
+}
+
+DECLINLINE(int) crMemcmp( const void *p1, const void *p2, unsigned int bytes )
+{
+	CRASSERT(p1);
+	CRASSERT(p2);
+	return memcmp( p1, p2, bytes );
+}
+
+extern DECLEXPORT(void *) crAlloc( unsigned int nbytes );
+extern DECLEXPORT(void *) crCalloc( unsigned int nbytes );
+extern DECLEXPORT(void) crRealloc( void **ptr, unsigned int bytes );
+extern DECLEXPORT(void) crFree( void *ptr );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_MEM_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_net.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_net.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_net.h	(revision 86648)
@@ -0,0 +1,262 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_NET_H
+#define CR_NET_H
+
+#ifdef RT_OS_WINDOWS
+# include <iprt/win/winsock.h>
+#endif
+
+#include "cr_protocol.h"
+#include "cr_threads.h"
+
+#include <iprt/types.h>
+#include <iprt/thread.h>
+#include <iprt/list.h>
+    
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct CRConnection CRConnection;
+
+typedef enum {
+    CR_NO_CONNECTION,
+    CR_VBOXHGCM,
+    CR_DROP_PACKETS
+} CRConnectionType;
+
+typedef void (*CRVoidFunc)( void );
+typedef int (*CRNetReceiveFunc)( CRConnection *conn, CRMessage *msg, unsigned int len );
+typedef int (*CRNetConnectFunc)( CRConnection *conn );
+typedef void (*CRNetCloseFunc)( unsigned int sender_id );
+
+typedef struct __recvFuncList {
+    CRNetReceiveFunc recv;
+    struct __recvFuncList *next;
+} CRNetReceiveFuncList;
+
+typedef struct __closeFuncList {
+    CRNetCloseFunc close;
+    struct __closeFuncList *next;
+} CRNetCloseFuncList;
+
+typedef struct __messageListNode {
+    CRMessage *mesg;    /* the actual message (header + payload) */
+    unsigned int len;   /* length of message (header + payload) */
+    CRConnection *conn; /* some messages are assoc. with specific connections*/
+    struct __messageListNode *next;  /* next in list */
+} CRMessageListNode;
+
+typedef struct {
+    CRMessageListNode *head, *tail;
+    int numMessages;
+    CRmutex lock;
+    CRcondition nonEmpty;
+} CRMessageList;
+
+
+/**
+ * Used to accumulate CR_MESSAGE_MULTI_BODY/TAIL chunks into one big buffer.
+ */
+typedef struct CRMultiBuffer {
+    unsigned int  len;  /* current length (<= max) (with sizeof_buffer_header) */
+    unsigned int  max;  /* size in bytes of data buffer */
+    void         *buf;  /* data buffer */
+} CRMultiBuffer;
+
+#ifdef VBOX_WITH_CRHGSMI
+# ifdef IN_GUEST
+typedef struct CRVBOXHGSMI_CLIENT {
+    struct VBOXUHGSMI *pHgsmi;
+    struct VBOXUHGSMI_BUFFER *pCmdBuffer;
+    struct VBOXUHGSMI_BUFFER *pHGBuffer;
+    void *pvHGBuffer;
+    struct CRBufferPool_t *bufpool;
+} CRVBOXHGSMI_CLIENT, *PCRVBOXHGSMI_CLIENT;
+#endif /* IN_GUEST */
+#endif /* #ifdef VBOX_WITH_CRHGSMI */
+/**
+ * Chromium network connection (bidirectional).
+ */
+struct CRConnection {
+    int ignore;
+    CRConnectionType type;
+    unsigned int id;         /* obtained from the mothership (if brokered) */
+
+    /* List of messages that we've received on the network connection but
+     * nobody has yet consumed.
+     */
+    CRMessageList messageList;
+
+    CRMultiBuffer multi;
+
+    unsigned int mtu;        /* max transmission unit size (in bytes) */
+    unsigned int buffer_size;
+    unsigned int krecv_buf_size;
+    int broker;              /* is connection brokered through mothership? */
+    int threaded;            /* is this a threaded connection? */
+    int swap;
+    int actual_network;      /* is this a real network? */
+
+    unsigned char *userbuf;
+    int userbuf_len;
+
+    /* To allocate a data buffer of size conn->buffer_size bytes */
+    void *(*Alloc)( CRConnection *conn );
+    /* To indicate the client's done with a data buffer */
+    void  (*Free)( CRConnection *conn, void *buf );
+    /* To send a data buffer.  If bufp is non-null, it must have been obtained
+     * from Alloc() and it'll be freed when Send() returns.
+     */
+    void  (*Send)( CRConnection *conn, void **buf, const void *start, unsigned int len );
+    /* To send a data buffer than can optionally be dropped on the floor */
+    void  (*Barf)( CRConnection *conn, void **buf, const void *start, unsigned int len );
+    /* To send 'len' bytes from buffer at 'start', no funny business */
+    void  (*SendExact)( CRConnection *conn, const void *start, unsigned int len );
+    /* To receive data.  'len' bytes will be placed into 'buf'. */
+    void  (*Recv)( CRConnection *conn, void *buf, unsigned int len );
+    /* To receive one message on the connection */
+    void  (*RecvMsg)( CRConnection *conn );
+    /* What's this??? */
+    void  (*InstantReclaim)( CRConnection *conn, CRMessage *mess );
+    /* Called when a full CR_MESSAGE_MULTI_HEAD/TAIL message has been received */
+    void  (*HandleNewMessage)( CRConnection *conn, CRMessage *mess, unsigned int len );
+    /* To accept a new connection from a client */
+    void  (*Accept)( CRConnection *conn);
+    /* To connect to a server (return 0 if error, 1 if success) */
+    int  (*Connect)( CRConnection *conn );
+    /* To disconnect from a server */
+    void  (*Disconnect)( CRConnection *conn );
+
+    unsigned int sizeof_buffer_header;
+
+    /* logging */
+    int total_bytes_sent;
+    int total_bytes_recv;
+    int recv_count;
+    int opcodes_count;
+
+    /* credits for flow control */
+    int send_credits;
+    int recv_credits;
+
+    /* VBox HGCM */
+    int      index;
+    uint32_t u32ClientID;
+    uint8_t  *pBuffer;
+    uint32_t cbBuffer;
+    uint8_t  *pHostBuffer;
+    uint32_t cbHostBufferAllocated;
+    uint32_t cbHostBuffer;
+#ifdef IN_GUEST
+    uint32_t u32InjectClientID;
+# ifdef VBOX_WITH_CRHGSMI
+    CRVBOXHGSMI_CLIENT HgsmiClient;
+    struct VBOXUHGSMI *pExternalHgsmi;
+# endif
+#else
+# ifdef VBOX_WITH_CRHGSMI
+    struct _crclient *pClient; /* back reference, just for simplicity */
+    CRVBOXHGSMI_CMDDATA CmdData;
+# endif
+    RTLISTANCHOR PendingMsgList;
+#endif
+    /* Used on host side to indicate that we are not allowed to store above pointers for later use
+     * in crVBoxHGCMReceiveMessage. As those messages are going to be processed after the corresponding 
+     * HGCM call is finished and memory is freed. So we have to store a copy.
+     * This happens when message processing for client associated with this connection 
+     * is blocked by another client, which has send us glBegin call and we're waiting to receive glEnd.
+     */
+    uint8_t  allow_redir_ptr;
+
+    uint32_t vMajor, vMinor; /*Protocol version*/
+};
+
+
+/*
+ * Network functions
+ */
+extern DECLEXPORT(int) crGetHostname( char *buf, unsigned int len );
+
+extern DECLEXPORT(void) crNetInit( CRNetReceiveFunc recvFunc, CRNetCloseFunc closeFunc );
+extern DECLEXPORT(void) crNetTearDown(void);
+
+extern DECLEXPORT(void) *crNetAlloc( CRConnection *conn );
+extern DECLEXPORT(void) crNetFree( CRConnection *conn, void *buf );
+
+extern DECLEXPORT(void) crNetAccept( CRConnection *conn );
+extern DECLEXPORT(int) crNetConnect( CRConnection *conn );
+extern DECLEXPORT(void) crNetDisconnect( CRConnection *conn );
+extern DECLEXPORT(void) crNetFreeConnection( CRConnection *conn );
+
+extern DECLEXPORT(void) crNetSend( CRConnection *conn, void **bufp, const void *start, unsigned int len );
+extern DECLEXPORT(void) crNetBarf( CRConnection *conn, void **bufp, const void *start, unsigned int len );
+extern DECLEXPORT(void) crNetSendExact( CRConnection *conn, const void *start, unsigned int len );
+extern DECLEXPORT(void) crNetSingleRecv( CRConnection *conn, void *buf, unsigned int len );
+extern DECLEXPORT(unsigned int) crNetGetMessage( CRConnection *conn, CRMessage **message );
+extern DECLEXPORT(unsigned int) crNetPeekMessage( CRConnection *conn, CRMessage **message );
+extern DECLEXPORT(int) crNetNumMessages(CRConnection *conn);
+extern DECLEXPORT(void) crNetReadline( CRConnection *conn, void *buf );
+extern DECLEXPORT(int) crNetRecv(
+#if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
+                CRConnection *conn
+#else
+                void
+#endif
+        );
+#if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
+#define CR_WRITEBACK_WAIT(_conn, _writeback) do { \
+        while (_writeback) {     \
+            RTThreadYield();     \
+            crNetRecv(_conn);    \
+        }                        \
+    } while (0)
+#else
+#define CR_WRITEBACK_WAIT(_conn, _writeback) do { \
+        while (_writeback) { \
+            RTThreadYield(); \
+            crNetRecv();     \
+        }                    \
+    } while (0)
+
+#endif
+#ifdef IN_GUEST
+extern DECLEXPORT(uint32_t) crNetHostCapsGet(void);
+#endif
+extern DECLEXPORT(void) crNetDefaultRecv( CRConnection *conn, CRMessage *msg, unsigned int len );
+extern DECLEXPORT(void) crNetDispatchMessage( CRNetReceiveFuncList *rfl, CRConnection *conn, CRMessage *msg, unsigned int len );
+
+extern DECLEXPORT(CRConnection *) crNetConnectToServer( const char *server, int mtu, int broker
+#if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
+                , struct VBOXUHGSMI *pHgsmi
+#endif
+);
+extern DECLEXPORT(CRConnection *) crNetAcceptClient( const char *protocol, const char *hostname, unsigned short port, unsigned int mtu, int broker );
+
+
+extern DECLEXPORT(void) crInitMessageList(CRMessageList *list);
+extern DECLEXPORT(void) crEnqueueMessage(CRMessageList *list, CRMessage *msg, unsigned int len, CRConnection *conn);
+extern DECLEXPORT(void) crDequeueMessage(CRMessageList *list, CRMessage **msg, unsigned int *len, CRConnection **conn);
+
+extern DECLEXPORT(void) crNetRecvReadPixels( const CRMessageReadPixels *rp, unsigned int len );
+
+
+/*
+ * Socket callback facility
+ */
+#define CR_SOCKET_CREATE 1
+#define CR_SOCKET_DESTROY 2
+typedef void (*CRSocketCallbackProc)(int mode, int socket);
+extern DECLEXPORT(void) crRegisterSocketCallback(int mode, CRSocketCallbackProc proc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_NET_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_netserver.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_netserver.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_netserver.h	(revision 86648)
@@ -0,0 +1,39 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_NETSERVER_H
+#define CR_NETSERVER_H
+
+#include "cr_net.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	char *name;
+	int buffer_size;
+	CRConnection *conn;
+} CRNetServer;
+
+DECLEXPORT(void) crNetServerConnect( CRNetServer *ns
+#if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
+                , struct VBOXUHGSMI *pHgsmi
+#endif
+                );
+DECLEXPORT(void) crNetNewClient( CRNetServer *ns
+#if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
+                , struct VBOXUHGSMI *pHgsmi
+#endif
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_NETSERVER_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_pack.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_pack.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_pack.h	(revision 86648)
@@ -0,0 +1,438 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_PACK_H
+#define CR_PACK_H
+
+#include "cr_compiler.h"
+#include "cr_error.h"
+#include "cr_protocol.h"
+#include "cr_opcodes.h"
+#ifndef IN_RING0
+# include "cr_glstate.h"
+#endif
+#include "state/cr_statetypes.h"
+#include "state/cr_currentpointers.h"
+#include "state/cr_client.h"
+#ifndef IN_RING0
+#include "cr_threads.h"
+#endif
+
+#include <iprt/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct CRPackContext_t CRPackContext;
+
+/**
+ * Packer buffer
+ */
+typedef struct
+{
+    void          *pack;  /**< the actual storage space/buffer */
+    unsigned int   size;  /**< size of pack[] buffer */
+    unsigned int   mtu;
+    unsigned char *data_start, *data_current, *data_end;
+    unsigned char *opcode_start, *opcode_current, *opcode_end;
+    GLboolean geometry_only;  /**< just used for debugging */
+    GLboolean holds_BeginEnd;
+    GLboolean in_BeginEnd;
+    GLboolean canBarf;
+    GLboolean holds_List;
+    GLboolean in_List;
+    CRPackContext *context;
+} CRPackBuffer;
+
+typedef void (*CRPackFlushFunc)(void *arg);
+typedef void (*CRPackSendHugeFunc)(CROpcode, void *);
+typedef void (*CRPackErrorHandlerFunc)(int line, const char *file, GLenum error, const char *info);
+
+#define CRPACKBLOCKSTATE_OP_BEGIN           0x01
+#define CRPACKBLOCKSTATE_OP_NEWLIST         0x02
+#define CRPACKBLOCKSTATE_OP_BEGINQUERY      0x04
+#define CRPACKBLOCKSTATE_OP_ALL             0x07
+
+#define CRPACKBLOCKSTATE_IS_OP_STARTED(_state, _op)      (!!((_state) & (_op)))
+
+#define CRPACKBLOCKSTATE_IS_STARTED(_state)      (!!(_state))
+
+#define CRPACKBLOCKSTATE_OP_START(_state, _op)      do { \
+            Assert(!CRPACKBLOCKSTATE_IS_OP_STARTED(_state, _op)); \
+            (_state) |= (_op); \
+        } while (0)
+
+#define CRPACKBLOCKSTATE_OP_STOP(_state, _op)      do { \
+            Assert(CRPACKBLOCKSTATE_IS_OP_STARTED(_state, _op)); \
+            (_state) &= ~(_op); \
+        } while (0)
+
+/**
+ * Packer context
+ */
+struct CRPackContext_t
+{
+    CRPackBuffer buffer;   /**< not a pointer, see comments in pack_buffer.c */
+    CRPackFlushFunc Flush;
+    void *flush_arg;
+    CRPackSendHugeFunc SendHuge;
+    CRPackErrorHandlerFunc Error;
+    CRCurrentStatePointers current;
+    uint32_t u32CmdBlockState;
+    GLvectorf bounds_min, bounds_max;
+    int updateBBOX;
+    CRPackBuffer *currentBuffer;
+#ifndef IN_RING0
+    CRmutex mutex;
+#endif
+    char *file;  /**< for debugging only */
+    int line;    /**< for debugging only */
+};
+
+#if !defined(IN_RING0)
+# define CR_PACKER_CONTEXT_ARGSINGLEDECL void
+# define CR_PACKER_CONTEXT_ARGDECL
+# define CR_PACKER_CONTEXT_ARG
+# define CR_PACKER_CONTEXT_ARG_NOREF()  do {} while (0)
+# define CR_PACKER_CONTEXT_ARGCTX(C)
+extern CRtsd _PackerTSD;
+#ifndef IN_RING0
+extern DECLHIDDEN(PCRStateTracker) g_pStateTracker; /** Hack to make the state tracker available to pack_client.c which uses crStateGetCurrent(). */
+#endif
+# define CR_GET_PACKER_CONTEXT(C) CRPackContext *C = (CRPackContext *) crGetTSD(&_PackerTSD)
+# define CR_LOCK_PACKER_CONTEXT(PC) crLockMutex(&((PC)->mutex))
+# define CR_UNLOCK_PACKER_CONTEXT(PC) crUnlockMutex(&((PC)->mutex))
+extern uint32_t cr_packer_cmd_blocks_enabled;
+#else /* if defined IN_RING0 */
+# define CR_PACKER_CONTEXT_ARGSINGLEDECL CRPackContext *_pCtx
+# define CR_PACKER_CONTEXT_ARGDECL CR_PACKER_CONTEXT_ARGSINGLEDECL,
+# define CR_PACKER_CONTEXT_ARG _pCtx,
+# define CR_PACKER_CONTEXT_ARG_NOREF() RT_NOREF_PV(_pCtx)
+# define CR_PACKER_CONTEXT_ARGCTX(C) C,
+# define CR_GET_PACKER_CONTEXT(C) CRPackContext *C = _pCtx
+# define CR_LOCK_PACKER_CONTEXT(PC)
+# define CR_UNLOCK_PACKER_CONTEXT(PC)
+#endif
+
+extern DECLEXPORT(CRPackContext *) crPackNewContext(void);
+extern DECLEXPORT(void) crPackDeleteContext(CRPackContext *pc);
+extern DECLEXPORT(void) crPackSetContext( CRPackContext *pc );
+extern DECLEXPORT(CRPackContext *) crPackGetContext( void );
+
+extern DECLEXPORT(void) crPackSetBuffer( CRPackContext *pc, CRPackBuffer *buffer );
+extern DECLEXPORT(void) crPackSetBufferDEBUG( const char *file, int line, CRPackContext *pc, CRPackBuffer *buffer );
+extern DECLEXPORT(void) crPackReleaseBuffer( CRPackContext *pc );
+extern DECLEXPORT(void) crPackResetPointers( CRPackContext *pc );
+
+extern DECLEXPORT(int) crPackMaxOpcodes( int buffer_size );
+extern DECLEXPORT(int) crPackMaxData( int buffer_size );
+extern DECLEXPORT(void) crPackInitBuffer( CRPackBuffer *buffer, void *buf, int size, int mtu
+#ifdef IN_RING0
+        , unsigned int num_opcodes
+#endif
+        );
+
+extern DECLEXPORT(void) crPackFlushFunc( CRPackContext *pc, CRPackFlushFunc ff );
+extern DECLEXPORT(void) crPackFlushArg( CRPackContext *pc, void *flush_arg );
+extern DECLEXPORT(void) crPackSendHugeFunc( CRPackContext *pc, CRPackSendHugeFunc shf );
+extern DECLEXPORT(void) crPackErrorFunction( CRPackContext *pc, CRPackErrorHandlerFunc errf );
+extern DECLEXPORT(void) crPackOffsetCurrentPointers( int offset );
+extern DECLEXPORT(void) crPackNullCurrentPointers( void );
+
+extern DECLEXPORT(void) crPackResetBoundingBox( CRPackContext *pc );
+extern DECLEXPORT(GLboolean) crPackGetBoundingBox( CRPackContext *pc,
+                                GLfloat *xmin, GLfloat *ymin, GLfloat *zmin,
+                                GLfloat *xmax, GLfloat *ymax, GLfloat *zmax);
+
+extern DECLEXPORT(void) crPackAppendBuffer( CR_PACKER_CONTEXT_ARGDECL const CRPackBuffer *buffer );
+extern DECLEXPORT(void) crPackAppendBoundedBuffer( CR_PACKER_CONTEXT_ARGDECL const CRPackBuffer *buffer, const CRrecti *bounds );
+extern DECLEXPORT(int) crPackCanHoldBuffer( CR_PACKER_CONTEXT_ARGDECL const CRPackBuffer *buffer );
+extern DECLEXPORT(int) crPackCanHoldBoundedBuffer( CR_PACKER_CONTEXT_ARGDECL const CRPackBuffer *buffer );
+
+#if defined(LINUX) || defined(WINDOWS)
+#define CR_UNALIGNED_ACCESS_OKAY
+#else
+#undef CR_UNALIGNED_ACCESS_OKAY
+#endif
+#ifndef IN_RING0
+extern DECLEXPORT(void) crWriteUnalignedDouble( void *buffer, double d );
+#endif
+
+extern DECLEXPORT(void) *crPackAlloc( CR_PACKER_CONTEXT_ARGDECL unsigned int len );
+extern DECLEXPORT(void) crHugePacket( CR_PACKER_CONTEXT_ARGDECL CROpcode op, void *ptr );
+extern DECLEXPORT(void) crPackFree( CR_PACKER_CONTEXT_ARGDECL void *ptr );
+extern DECLEXPORT(void) crNetworkPointerWrite( CRNetworkPointer *, void * );
+
+extern DECLEXPORT(void) crPackExpandDrawArrays(GLenum mode, GLint first, GLsizei count, CRClientState *c, const GLfloat *pZva);
+extern DECLEXPORT(void) crPackExpandDrawArraysSWAP(GLenum mode, GLint first, GLsizei count, CRClientState *c, const GLfloat *pZva);
+
+extern DECLEXPORT(void) crPackUnrollDrawElements(GLsizei count, GLenum type, const GLvoid *indices);
+extern DECLEXPORT(void) crPackUnrollDrawElementsSWAP(GLsizei count, GLenum type, const GLvoid *indices);
+
+extern DECLEXPORT(void) crPackExpandDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, CRClientState *c, const GLfloat *pZva);
+extern DECLEXPORT(void) crPackExpandDrawElementsSWAP(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, CRClientState *c, const GLfloat *pZva);
+
+extern DECLEXPORT(void) crPackExpandDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, CRClientState *c, const GLfloat *pZva);
+extern DECLEXPORT(void) crPackExpandDrawRangeElementsSWAP(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, CRClientState *c, const GLfloat *pZva);
+
+extern DECLEXPORT(void) crPackExpandArrayElement(GLint index, CRClientState *c, const GLfloat *pZva);
+extern DECLEXPORT(void) crPackExpandArrayElementSWAP(GLint index, CRClientState *c, const GLfloat *pZva);
+
+extern DECLEXPORT(void) crPackExpandMultiDrawArraysEXT( GLenum mode, GLint *first, GLsizei *count, GLsizei primcount, CRClientState *c, const GLfloat *pZva );
+extern DECLEXPORT(void) crPackExpandMultiDrawArraysEXTSWAP( GLenum mode, GLint *first, GLsizei *count, GLsizei primcount, CRClientState *c, const GLfloat *pZva );
+
+extern DECLEXPORT(void) crPackExpandMultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount, CRClientState *c, const GLfloat *pZva );
+extern DECLEXPORT(void) crPackExpandMultiDrawElementsEXTSWAP( GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount, CRClientState *c, const GLfloat *pZva );
+
+extern DECLEXPORT(void) crPackCapsSet(uint32_t u32Caps);
+
+/**
+ * Return number of opcodes in given buffer.
+ */
+static INLINE int
+crPackNumOpcodes(const CRPackBuffer *buffer)
+{
+    CRASSERT(buffer->opcode_start - buffer->opcode_current >= 0);
+    return buffer->opcode_start - buffer->opcode_current;
+}
+
+DECLINLINE(bool) crPackBufferIsEmpty(CRPackBuffer *buffer)
+{
+    return crPackNumOpcodes(buffer) == 0;
+}
+
+/**
+ * Return amount of data (in bytes) in buffer.
+ */
+static INLINE int
+crPackNumData(const CRPackBuffer *buffer)
+{
+    CRASSERT(buffer->data_current - buffer->data_start >= 0);
+    return buffer->data_current - buffer->data_start; /* in bytes */
+}
+
+
+static INLINE int
+crPackCanHoldOpcode(const CRPackContext *pc, int num_opcode, int num_data)
+{
+  int fitsInMTU, opcodesFit, dataFits;
+
+  CRASSERT(pc->currentBuffer);
+
+  fitsInMTU = (((pc->buffer.data_current - pc->buffer.opcode_current - 1
+                 + num_opcode + num_data
+                 + 0x3 ) & ~0x3) + sizeof(CRMessageOpcodes)
+               <= pc->buffer.mtu);
+  opcodesFit = (pc->buffer.opcode_current - num_opcode >= pc->buffer.opcode_end);
+  dataFits = (pc->buffer.data_current + num_data <= pc->buffer.data_end);
+
+  return fitsInMTU && opcodesFit && dataFits;
+}
+
+
+#define CR_PACK_SPECIAL_OP( _pc, _op)                               \
+  do {                                                              \
+    data_ptr = pc->buffer.data_current;                             \
+    (_pc)->buffer.data_current += 4;                                \
+    WRITE_OPCODE( (_pc), (_op) );                                   \
+    WRITE_DATA( 0, GLuint, 0xdeadbeef );                            \
+    data_ptr = NULL; /* <- sanity*/                                 \
+  } while (0)
+
+#define CR_CMDBLOCK_OP( _pc, _op)                                   \
+  do {                                                              \
+      CR_PACK_SPECIAL_OP( _pc, _op);                                \
+  } while (0)
+
+#define CR_CMDBLOCK_IS_STARTED( pc, op )  CRPACKBLOCKSTATE_IS_OP_STARTED((pc)->u32CmdBlockState, op)
+
+#define CR_CMDBLOCK_BEGIN( pc, op )                                 \
+  do {                                                              \
+    CR_LOCK_PACKER_CONTEXT(pc);                                     \
+    if (!cr_packer_cmd_blocks_enabled) break;                       \
+    if (!CRPACKBLOCKSTATE_IS_STARTED((pc)->u32CmdBlockState)) {       \
+      THREADASSERT( pc );                                           \
+      CRASSERT( (pc)->currentBuffer );                                \
+      if (!crPackBufferIsEmpty(&(pc)->buffer)) {                      \
+        if ((*(pc)->buffer.opcode_start) != CR_NOP_OPCODE) {          \
+          (pc)->Flush( (pc)->flush_arg );                               \
+          Assert(crPackCanHoldOpcode( (pc), 1, 4 ) );                 \
+          CR_CMDBLOCK_OP( (pc), CR_CMDBLOCKBEGIN_OPCODE );            \
+        }                                                           \
+        else {                                                      \
+          (*(pc)->buffer.opcode_start) = CR_CMDBLOCKBEGIN_OPCODE;     \
+        }                                                           \
+      }                                                             \
+      else {                                                        \
+        Assert(crPackCanHoldOpcode( (pc), 1, 4 ) );                   \
+        CR_CMDBLOCK_OP( (pc), CR_CMDBLOCKBEGIN_OPCODE );              \
+      }                                                             \
+    }                                                               \
+    Assert(!CRPACKBLOCKSTATE_IS_OP_STARTED((pc)->u32CmdBlockState, op)); \
+    CRPACKBLOCKSTATE_OP_START((pc)->u32CmdBlockState, op);            \
+    Assert(CRPACKBLOCKSTATE_IS_OP_STARTED((pc)->u32CmdBlockState, op)); \
+  } while (0)
+
+#define CR_CMDBLOCK_END( pc, op )                                   \
+  do {                                                              \
+    if (!cr_packer_cmd_blocks_enabled) break;                       \
+    Assert(CRPACKBLOCKSTATE_IS_OP_STARTED((pc)->u32CmdBlockState, op)); \
+    CRPACKBLOCKSTATE_OP_STOP((pc)->u32CmdBlockState, op);             \
+    Assert(!CRPACKBLOCKSTATE_IS_OP_STARTED((pc)->u32CmdBlockState, op)); \
+    if (!CRPACKBLOCKSTATE_IS_STARTED((pc)->u32CmdBlockState)) {     \
+      THREADASSERT( pc );                                           \
+      CRASSERT( (pc)->currentBuffer );                              \
+      if (!crPackBufferIsEmpty(&(pc)->buffer)) {                    \
+        if ((*(pc)->buffer.opcode_start) != CR_CMDBLOCKBEGIN_OPCODE) {\
+          if ( !crPackCanHoldOpcode( pc, 1, 4 ) ) {                 \
+            (pc)->Flush( (pc)->flush_arg );                         \
+            Assert(crPackCanHoldOpcode( pc, 1, 4 ) );               \
+          }                                                         \
+          CR_CMDBLOCK_OP( pc, CR_CMDBLOCKEND_OPCODE );              \
+          (pc)->Flush( (pc)->flush_arg );                           \
+        }                                                           \
+        else {                                                      \
+          (*(pc)->buffer.opcode_start) = CR_NOP_OPCODE;             \
+        }                                                           \
+      }                                                             \
+      else {                                                        \
+        Assert(crPackCanHoldOpcode( pc, 1, 4 ) );                   \
+        CR_CMDBLOCK_OP( pc, CR_CMDBLOCKEND_OPCODE );                \
+        (pc)->Flush( pc->flush_arg );                               \
+      }                                                             \
+    }                                                               \
+  } while (0)
+
+#define CR_CMDBLOCK_CHECK_FLUSH( pc )                               \
+  do {                                                              \
+    if (!(cr_packer_cmd_blocks_enabled & CR_VBOX_CAP_CMDBLOCKS_FLUSH)) break; \
+    if(!CRPACKBLOCKSTATE_IS_OP_STARTED((pc)->u32CmdBlockState, CRPACKBLOCKSTATE_OP_NEWLIST)) break; \
+    THREADASSERT( pc );                                             \
+    CRASSERT( (pc)->currentBuffer );                                \
+    if ( !crPackCanHoldOpcode( pc, 1, 4 ) ) {                       \
+      (pc)->Flush( (pc)->flush_arg );                               \
+      Assert(crPackCanHoldOpcode( pc, 1, 4 ) );                     \
+    }                                                               \
+    CR_CMDBLOCK_OP( pc, CR_CMDBLOCKFLUSH_OPCODE );                  \
+    (pc)->Flush( (pc)->flush_arg );                                 \
+  } while (0)
+
+/**
+ * Alloc space for a message of 'len' bytes (plus 1 opcode).
+ * Only flush if buffer is full.
+ */
+#define CR_GET_BUFFERED_POINTER_NO_BEGINEND_FLUSH(pc, len, lock)    \
+  do {                                                              \
+    THREADASSERT( pc );                                             \
+    if (lock) CR_LOCK_PACKER_CONTEXT(pc);                           \
+    CRASSERT( pc->currentBuffer );                                  \
+    if ( !crPackCanHoldOpcode( pc, 1, (len) ) ) {                   \
+      pc->Flush( pc->flush_arg );                                   \
+      CRASSERT(crPackCanHoldOpcode( pc, 1, (len) ) );               \
+    }                                                               \
+    data_ptr = pc->buffer.data_current;                             \
+    pc->buffer.data_current += (len);                               \
+  } while (0)
+
+/**
+ * As above, flush if the buffer contains vertex data and we're
+ * no longer inside glBegin/glEnd.
+ */
+#define CR_GET_BUFFERED_POINTER( pc, len )                          \
+  do {                                                              \
+    CR_LOCK_PACKER_CONTEXT(pc);                                     \
+    CRASSERT( pc->currentBuffer );                                  \
+    if ( pc->buffer.holds_BeginEnd && !pc->buffer.in_BeginEnd ) {   \
+      CRASSERT( 0 );  /* should never be here currently */          \
+      pc->Flush( pc->flush_arg );                                   \
+      pc->buffer.holds_BeginEnd = 0;                                \
+    }                                                               \
+    CR_GET_BUFFERED_POINTER_NO_BEGINEND_FLUSH( pc, len, GL_FALSE ); \
+  } while (0)
+
+/**
+ * As above, but without lock.
+ */
+#define CR_GET_BUFFERED_POINTER_NOLOCK( pc, len )                   \
+  do {                                                              \
+    CRASSERT( pc->currentBuffer );                                  \
+    if ( pc->buffer.holds_BeginEnd && !pc->buffer.in_BeginEnd ) {   \
+      CRASSERT( 0 );  /* should never be here currently */          \
+      pc->Flush( pc->flush_arg );                                   \
+      pc->buffer.holds_BeginEnd = 0;                                \
+    }                                                               \
+    CR_GET_BUFFERED_POINTER_NO_BEGINEND_FLUSH( pc, len, GL_FALSE ); \
+  } while (0)
+
+
+/**
+ * As above, but for vertex data between glBegin/End (counts vertices).
+ */
+#define CR_GET_BUFFERED_COUNT_POINTER( pc, len )        \
+  do {                                                  \
+    CR_LOCK_PACKER_CONTEXT(pc);                         \
+    CRASSERT( pc->currentBuffer );                      \
+    if ( !crPackCanHoldOpcode( pc, 1, (len) ) ) {       \
+      pc->Flush( pc->flush_arg );                       \
+      CRASSERT( crPackCanHoldOpcode( pc, 1, (len) ) );  \
+    }                                                   \
+    data_ptr = pc->buffer.data_current;                 \
+    pc->current.vtx_count++;                            \
+    pc->buffer.data_current += (len);                   \
+  } while (0)
+
+
+/**
+ * Allocate space for a msg/command that has no arguments, such
+ * as glFinish().
+ */
+#define CR_GET_BUFFERED_POINTER_NO_ARGS( pc )  \
+  CR_GET_BUFFERED_POINTER( pc, 4 );            \
+  WRITE_DATA( 0, GLuint, 0xdeadbeef )
+
+#define WRITE_DATA( offset, type, data ) \
+  *( (type *) (data_ptr + (offset))) = (data)
+
+/* Write data to current location and auto increment */
+#define WRITE_DATA_AI(type, data)     \
+  {                                   \
+      *((type*) (data_ptr)) = (data); \
+      data_ptr += sizeof(type);       \
+  }
+
+#ifdef CR_UNALIGNED_ACCESS_OKAY
+#define WRITE_DOUBLE( offset, data ) \
+  WRITE_DATA( offset, GLdouble, data )
+#else
+# ifndef IN_RING0
+#  define WRITE_DOUBLE( offset, data ) \
+        crWriteUnalignedDouble( data_ptr + (offset), (data) )
+# else
+#  define WRITE_DOUBLE( offset, data ) \
+        AssertReleaseFailed()
+# endif
+#endif
+
+#ifndef IN_RING0
+#define WRITE_SWAPPED_DOUBLE( offset, data ) \
+    crWriteSwappedDouble( data_ptr + (offset), (data) )
+#else
+#define WRITE_SWAPPED_DOUBLE( offset, data ) \
+        AssertReleaseFailed()
+#endif
+
+#define WRITE_OPCODE( pc, opcode )  \
+  *(pc->buffer.opcode_current--) = (unsigned char) opcode
+
+#define WRITE_NETWORK_POINTER( offset, data ) \
+  crNetworkPointerWrite( (CRNetworkPointer *) ( data_ptr + (offset) ), (data) )
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_PACK_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_pixeldata.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_pixeldata.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_pixeldata.h	(revision 86648)
@@ -0,0 +1,54 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_PIXELDATA_H
+#define CR_PIXELDATA_H
+
+#include "chromium.h"
+#include "state/cr_client.h"
+
+#include <iprt/cdefs.h>
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DECLEXPORT(int) crPixelSize( GLenum format, GLenum type );
+
+DECLEXPORT(unsigned int) crImageSize( GLenum format, GLenum type,
+													GLsizei width, GLsizei height );
+
+DECLEXPORT(unsigned int) crTextureSize( GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth );
+
+DECLEXPORT(void) crPixelCopy1D( GLvoid *dstPtr, GLenum dstFormat, GLenum dstType,
+										const GLvoid *srcPtr, GLenum srcFormat, GLenum srcType,
+										GLsizei width, const CRPixelPackState *srcPacking );
+
+DECLEXPORT(void) crPixelCopy2D( GLsizei width, GLsizei height,
+										GLvoid *dstPtr, GLenum dstFormat, GLenum dstType,
+										const CRPixelPackState *dstPacking,
+										const GLvoid *srcPtr, GLenum srcFormat, GLenum srcType,
+										const CRPixelPackState *srcPacking );
+
+DECLEXPORT(void) crPixelCopy3D( GLsizei width, GLsizei height, GLsizei depth,
+										GLvoid *dstPtr, GLenum dstFormat, GLenum dstType,
+										const CRPixelPackState *dstPacking, const GLvoid *srcPtr,
+										GLenum srcFormat, GLenum srcType,
+										const CRPixelPackState *srcPacking );
+
+DECLEXPORT(void) crBitmapCopy( GLsizei width, GLsizei height, GLubyte *dstPtr,
+									 const GLubyte *srcPtr, const CRPixelPackState *srcPacking );
+
+DECLEXPORT(void) crDumpNamedTGA(const char *fname, GLint w, GLint h, GLvoid *data);
+DECLEXPORT(void) crDumpNamedTGAV(GLint w, GLint h, GLvoid *data, const char* fname, va_list va);
+DECLEXPORT(void) crDumpNamedTGAF(GLint w, GLint h, GLvoid *data, const char* fname, ...);
+DECLEXPORT(void) crDumpTGA(GLint w, GLint h, GLvoid *data);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_PIXELDATA_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_process.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_process.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_process.h	(revision 86648)
@@ -0,0 +1,44 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_PROCESS_H
+#define CR_PROCESS_H
+
+#ifdef WINDOWS
+#define WIN32_LEAN_AND_MEAN
+# ifdef VBOX
+#  include <iprt/win/windows.h>
+# else
+#include <windows.h>
+# endif
+#endif
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Process ID type
+ */
+#ifdef WINDOWS
+typedef HANDLE CRpid;
+#else
+typedef unsigned long CRpid;
+#endif
+
+
+extern DECLEXPORT(void) crGetProcName( char *name, int maxLen );
+
+extern DECLEXPORT(CRpid) crGetPID(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_PROCESS_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_protocol.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_protocol.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_protocol.h	(revision 86648)
@@ -0,0 +1,291 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_PROTOCOL_H
+#define CR_PROTOCOL_H
+
+#include <iprt/types.h>
+#include <iprt/cdefs.h>
+#ifdef DEBUG_misha
+#include "cr_error.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CR_CMDVBVA_VERSION              1
+
+#pragma pack(1)
+typedef struct CR_CAPS_INFO
+{
+    uint32_t u32Caps;
+    uint32_t u32CmdVbvaVersion;
+} CR_CAPS_INFO;
+#pragma pack()
+
+
+/*For now guest is allowed to connect host opengl service if protocol version matches exactly*/
+/*Note: that after any change to this file, or glapi_parser\apispec.txt version should be changed*/
+#define CR_PROTOCOL_VERSION_MAJOR 9
+#define CR_PROTOCOL_VERSION_MINOR 1
+
+/* new TexPresent mechanism is available */
+#define CR_VBOX_CAP_TEX_PRESENT         0x00000001
+/* vbva command submission mechanism supported */
+#define CR_VBOX_CAP_CMDVBVA             0x00000002
+/* host supports Command Blocks, i.e. CR_CMDBLOCKBEGIN_OPCODE and CR_CMDBLOCKEND_OPCODE opcodes.
+ * Command Block can be used by guest to prevent clients from blocking each other.
+ * The Command Block allows multiple command buffers to be processed with one run.
+ * Command Block commands have to obey to the following rules:
+ * CR_CMDBLOCKBEGIN_OPCODE - must be the first command in the command buffer, specifying the command block start
+ * CR_CMDBLOCKEND_OPCODE - must be the last command in the command buffer, specifying the command block end
+ * If not placed accordingly, CR_CMDBLOCK** commands are ignored.
+ * Server copies the command block buffer commands to its internal storage
+ * and processes them with one run when the command block end is signalled
+ */
+#define CR_VBOX_CAP_CMDBLOCKS            0x00000004
+/* GetAttribsLocations support */
+#define CR_VBOX_CAP_GETATTRIBSLOCATIONS  0x00000008
+/* flush command blocks for execution  */
+#define CR_VBOX_CAP_CMDBLOCKS_FLUSH      0x00000010
+/* Notify guest if host reports minimal OpenGL capabilities. */
+#define CR_VBOX_CAP_HOST_CAPS_NOT_SUFFICIENT 0x00000020
+
+#define CR_VBOX_CAPS_ALL                 0x0000003f
+
+
+#define CR_PRESENT_SCREEN_MASK 0xffff
+#define CR_PRESENT_FLAGS_OFFSET 16
+#define CR_PRESENT_FLAGS_MASK 0xffff0000
+#define CR_PRESENT_DEFINE_FLAG(_f) (1 << (CR_PRESENT_FLAGS_OFFSET + _f))
+
+#define CR_PRESENT_FLAG_CLEAR_RECTS            CR_PRESENT_DEFINE_FLAG(0)
+#define CR_PRESENT_FLAG_TEX_NONINVERT_YCOORD   CR_PRESENT_DEFINE_FLAG(1)
+
+#define CR_PRESENT_GET_SCREEN(_cfg) ((_cfg) & CR_PRESENT_SCREEN_MASK)
+#define CR_PRESENT_GET_FLAGS(_cfg) ((_cfg) & CR_PRESENT_FLAGS_MASK)
+
+typedef enum {
+    /* first message types is 'wGL\001', so we can immediately
+         recognize bad message types */
+    CR_MESSAGE_OPCODES = 0x77474c01,
+    CR_MESSAGE_WRITEBACK,
+    CR_MESSAGE_READBACK,
+    CR_MESSAGE_READ_PIXELS,
+    CR_MESSAGE_MULTI_BODY,
+    CR_MESSAGE_MULTI_TAIL,
+    CR_MESSAGE_FLOW_CONTROL,
+    CR_MESSAGE_OOB,
+    CR_MESSAGE_NEWCLIENT,
+    CR_MESSAGE_GATHER,
+    CR_MESSAGE_ERROR,
+    CR_MESSAGE_CRUT,
+    CR_MESSAGE_REDIR_PTR
+} CRMessageType;
+
+typedef union {
+    /* pointers are usually 4 bytes, but on 64-bit machines (Alpha,
+     * SGI-n64, etc.) they are 8 bytes.  Pass network pointers around
+     * as an opaque array of bytes, since the interpretation & size of
+     * the pointer only matter to the machine which emitted the
+     * pointer (and will eventually receive the pointer back again) */
+    unsigned int  ptrAlign[2];
+    unsigned char ptrSize[8];
+    /* hack to make this packet big */
+    /* unsigned int  junk[512]; */
+} CRNetworkPointer;
+
+#if 0 /*def DEBUG_misha*/
+#define CRDBGPTR_SETZ(_p) crMemset((_p), 0, sizeof (CRNetworkPointer))
+#define CRDBGPTR_CHECKZ(_p) do { \
+        CRNetworkPointer _ptr = {0}; \
+        CRASSERT(!crMemcmp((_p), &_ptr, sizeof (CRNetworkPointer))); \
+    } while (0)
+#define CRDBGPTR_CHECKNZ(_p) do { \
+        CRNetworkPointer _ptr = {0}; \
+        CRASSERT(crMemcmp((_p), &_ptr, sizeof (CRNetworkPointer))); \
+    } while (0)
+# if 0
+#  define _CRDBGPTR_PRINT(_tStr, _id, _p) do { \
+        crDebug(_tStr "%d:0x%08x%08x", (_id), (_p)->ptrAlign[1], (_p)->ptrAlign[0]); \
+    } while (0)
+# else
+#  define _CRDBGPTR_PRINT(_tStr, _id, _p) do { } while (0)
+# endif
+#define CRDBGPTR_PRINTWB(_id, _p) _CRDBGPTR_PRINT("wbptr:", _id, _p)
+#define CRDBGPTR_PRINTRB(_id, _p) _CRDBGPTR_PRINT("rbptr:", _id, _p)
+#else
+#define CRDBGPTR_SETZ(_p) do { } while (0)
+#define CRDBGPTR_CHECKZ(_p) do { } while (0)
+#define CRDBGPTR_CHECKNZ(_p) do { } while (0)
+#define CRDBGPTR_PRINTWB(_id, _p) do { } while (0)
+#define CRDBGPTR_PRINTRB(_id, _p) do { } while (0)
+#endif
+
+#ifdef VBOX_WITH_CRHGSMI
+typedef struct CRVBOXHGSMI_CMDDATA {
+    union
+    {
+        struct VBOXVDMACMD_CHROMIUM_CMD *pHgsmiCmd;
+        struct VBOXCMDVBVA_CRCMD_CMD *pVbvaCmd;
+        const void *pvCmd;
+    };
+    int          *pCmdRc;
+    char         *pWriteback;
+    unsigned int *pcbWriteback;
+    unsigned int cbWriteback;
+    bool fHgsmiCmd;
+} CRVBOXHGSMI_CMDDATA, *PCRVBOXHGSMI_CMDDATA;
+
+#ifdef DEBUG
+# define CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData)  do { \
+        CRASSERT(!(_pData)->pvCmd == !(_pData)->pCmdRc); \
+        CRASSERT(!(_pData)->pWriteback == !(_pData)->pcbWriteback); \
+        CRASSERT(!(_pData)->pWriteback == !(_pData)->cbWriteback); \
+        if ((_pData)->pWriteback) \
+        { \
+            CRASSERT((_pData)->pvCmd); \
+        } \
+    } while (0)
+
+# define CRVBOXHGSMI_CMDDATA_ASSERT_CLEANED(_pData)  do { \
+        CRASSERT(!(_pData)->pvCmd); \
+        CRASSERT(!(_pData)->pCmdRc); \
+        CRASSERT(!(_pData)->pWriteback); \
+        CRASSERT(!(_pData)->pcbWriteback); \
+        CRASSERT(!(_pData)->cbWriteback); \
+    } while (0)
+
+# define CRVBOXHGSMI_CMDDATA_ASSERT_ISSET(_pData)  do { \
+        CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData); \
+        CRASSERT(CRVBOXHGSMI_CMDDATA_IS_SET(_pData)); \
+    } while (0)
+
+# define CRVBOXHGSMI_CMDDATA_ASSERT_ISSETWB(_pData)  do { \
+        CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData); \
+        CRASSERT(CRVBOXHGSMI_CMDDATA_IS_SETWB(_pData)); \
+    } while (0)
+#else
+# define CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData)  do { } while (0)
+# define CRVBOXHGSMI_CMDDATA_ASSERT_CLEANED(_pData)  do { } while (0)
+# define CRVBOXHGSMI_CMDDATA_ASSERT_ISSET(_pData)  do { } while (0)
+# define CRVBOXHGSMI_CMDDATA_ASSERT_ISSETWB(_pData)  do { } while (0)
+#endif
+
+#define CRVBOXHGSMI_CMDDATA_IS_HGSMICMD(_pData) (!!(_pData)->fHgsmiCmd)
+#define CRVBOXHGSMI_CMDDATA_IS_SET(_pData) (!!(_pData)->pvCmd)
+#define CRVBOXHGSMI_CMDDATA_IS_SETWB(_pData) (!!(_pData)->pWriteback)
+
+#define CRVBOXHGSMI_CMDDATA_CLEANUP(_pData) do { \
+        crMemset(_pData, 0, sizeof (CRVBOXHGSMI_CMDDATA)); \
+        CRVBOXHGSMI_CMDDATA_ASSERT_CLEANED(_pData); \
+        CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData); \
+    } while (0)
+
+#define CRVBOXHGSMI_CMDDATA_SET(_pData, _pCmd, _pHdr, _fHgsmiCmd) do { \
+        CRVBOXHGSMI_CMDDATA_ASSERT_CLEANED(_pData); \
+        (_pData)->pvCmd = (_pCmd); \
+        (_pData)->pCmdRc = &(_pHdr)->result; \
+        (_pData)->fHgsmiCmd = (_fHgsmiCmd); \
+        CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData); \
+    } while (0)
+
+#define CRVBOXHGSMI_CMDDATA_SETWB(_pData, _pCmd, _pHdr, _pWb, _cbWb, _pcbWb, _fHgsmiCmd) do { \
+        CRVBOXHGSMI_CMDDATA_SET(_pData, _pCmd, _pHdr, _fHgsmiCmd); \
+        (_pData)->pWriteback = (_pWb); \
+        (_pData)->pcbWriteback = (_pcbWb); \
+        (_pData)->cbWriteback = (_cbWb); \
+        CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData); \
+    } while (0)
+
+#define CRVBOXHGSMI_CMDDATA_RC(_pData, _rc) do { \
+        *(_pData)->pCmdRc = (_rc); \
+    } while (0)
+#endif
+
+typedef struct {
+    CRMessageType          type;
+    unsigned int           conn_id;
+} CRMessageHeader;
+
+typedef struct CRMessageOpcodes {
+    CRMessageHeader        header;
+    unsigned int           numOpcodes;
+} CRMessageOpcodes;
+
+typedef struct CRMessageRedirPtr {
+    CRMessageHeader        header;
+    CRMessageHeader*       pMessage;
+#ifdef VBOX_WITH_CRHGSMI
+    CRVBOXHGSMI_CMDDATA   CmdData;
+#endif
+} CRMessageRedirPtr;
+
+typedef struct CRMessageWriteback {
+    CRMessageHeader        header;
+    CRNetworkPointer       writeback_ptr;
+} CRMessageWriteback;
+
+typedef struct CRMessageReadback {
+    CRMessageHeader        header;
+    CRNetworkPointer       writeback_ptr;
+    CRNetworkPointer       readback_ptr;
+} CRMessageReadback;
+
+typedef struct CRMessageMulti {
+    CRMessageHeader        header;
+} CRMessageMulti;
+
+typedef struct CRMessageFlowControl {
+    CRMessageHeader        header;
+    unsigned int           credits;
+} CRMessageFlowControl;
+
+typedef struct CRMessageReadPixels {
+    CRMessageHeader        header;
+    int                    width, height;
+    unsigned int           bytes_per_row;
+    unsigned int           stride;
+    int                    alignment;
+    int                    skipRows;
+    int                    skipPixels;
+    int                    rowLength;
+    int                    format;
+    int                    type;
+    CRNetworkPointer       pixels;
+} CRMessageReadPixels;
+
+typedef struct CRMessageNewClient {
+    CRMessageHeader        header;
+} CRMessageNewClient;
+
+typedef struct CRMessageGather {
+    CRMessageHeader        header;
+    unsigned long           offset;
+    unsigned long           len;
+} CRMessageGather;
+
+typedef union {
+    CRMessageHeader      header;
+    CRMessageOpcodes     opcodes;
+    CRMessageRedirPtr    redirptr;
+    CRMessageWriteback   writeback;
+    CRMessageReadback    readback;
+    CRMessageReadPixels  readPixels;
+    CRMessageMulti       multi;
+    CRMessageFlowControl flowControl;
+    CRMessageNewClient   newclient;
+    CRMessageGather      gather;
+} CRMessage;
+
+DECLEXPORT(void) crNetworkPointerWrite( CRNetworkPointer *dst, void *src );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_PROTOCOL_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_server.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_server.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_server.h	(revision 86648)
@@ -0,0 +1,607 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef INCLUDE_CR_SERVER_H
+#define INCLUDE_CR_SERVER_H
+
+#include "cr_spu.h"
+#include "cr_net.h"
+#include "cr_hash.h"
+#include "cr_protocol.h"
+#include "cr_glstate.h"
+#include "cr_vreg.h"
+#include "cr_blitter.h"
+#include "cr_htable.h"
+#include "cr_unpack.h"
+#include "spu_dispatch_table.h"
+#include "cr_dump.h"
+
+#include "state/cr_currentpointers.h"
+
+#include <iprt/types.h>
+#include <iprt/err.h>
+#include <iprt/string.h>
+#include <iprt/list.h>
+#include <iprt/thread.h>
+#include <iprt/critsect.h>
+#include <iprt/semaphore.h>
+#include <iprt/memcache.h>
+
+#include <VBox/vmm/ssm.h>
+
+#include <VBoxVideo.h>
+#include <VBoxVideoVBE.h>
+#include <VBoxVideo3D.h>
+#include <VBoxVideoHost3D.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CR_MAX_WINDOWS 100
+#define CR_MAX_CLIENTS 64
+
+/** @todo must match MaxGuestMonitors from SchemaDefs.h*/
+#define CR_MAX_GUEST_MONITORS VBOX_VIDEO_MAX_SCREENS
+
+typedef DECLCALLBACKPTR(void, PFNCRSERVERPRESENTFBO) (void *data, int32_t screenId, int32_t x, int32_t y, uint32_t w, uint32_t h);
+
+/* Callbacks for output of the rendered frames.
+ *
+ * This allows to pass rendered frames to an external component rather than draw them on screen.
+ *
+ * An external component registers the redirection callbacks using crVBoxServerOutputRedirectSet.
+ *
+ * The list of formats supported by the caller is obtained using CRORContextProperty.
+ * The actual format choosed by the service is passed as a CRORBegin parameter.
+ */
+typedef struct {
+    const void *pvContext; /* Supplied by crVBoxServerOutputRedirectSet. */
+    DECLR3CALLBACKMEMBER(void, CRORBegin,           (const void *pvContext, void **ppvInstance,
+                                                     const char *pszFormat));
+    DECLR3CALLBACKMEMBER(void, CRORGeometry,        (void *pvInstance,
+                                                     int32_t x, int32_t y, uint32_t w, uint32_t h));
+    DECLR3CALLBACKMEMBER(void, CRORVisibleRegion,   (void *pvInstance,
+                                                     uint32_t cRects, const RTRECT *paRects));
+    DECLR3CALLBACKMEMBER(void, CRORFrame,           (void *pvInstance,
+                                                     void *pvData, uint32_t cbData));
+    DECLR3CALLBACKMEMBER(void, CROREnd,             (void *pvInstance));
+    DECLR3CALLBACKMEMBER(int,  CRORContextProperty, (const void *pvContext, uint32_t index,
+                                                      void *pvBuffer, uint32_t cbBuffer, uint32_t *pcbOut));
+} CROutputRedirect;
+
+typedef struct {
+    CRrecti imagewindow;    /**< coordinates in mural space */
+    CRrectf bounds;         /**< normalized coordinates in [-1,-1] x [1,1] */
+    CRrecti outputwindow;   /**< coordinates in server's rendering window */
+    CRrecti clippedImagewindow;  /**< imagewindow clipped to current viewport */
+    CRmatrix baseProjection;  /**< pre-multiplied onto projection matrix */
+    CRrecti scissorBox;     /**< passed to back-end OpenGL */
+    CRrecti viewport;       /**< passed to back-end OpenGL */
+    GLuint serialNo;        /**< an optimization */
+} CRExtent;
+
+struct BucketingInfo;
+
+typedef struct {
+    char   *pszDpyName;
+    GLint   visualBits;
+    int32_t externalID;
+} CRCreateInfo_t;
+
+typedef struct {
+    char   *pszDpyName;
+    int32_t externalID;
+    GLint   requestedVisualBits;
+    GLint   realVisualBits;
+} CRCreateInfoEx_t;
+
+/* VRAM->RAM worker thread */
+
+typedef enum
+{
+    CR_SERVER_RPW_STATE_UNINITIALIZED = 0,
+    CR_SERVER_RPW_STATE_INITIALIZING,
+    CR_SERVER_RPW_STATE_INITIALIZED,
+    CR_SERVER_RPW_STATE_UNINITIALIZING,
+} CR_SERVER_RPW_STATE;
+
+/* worker control command */
+typedef enum
+{
+    CR_SERVER_RPW_CTL_TYPE_UNDEFINED = 0,
+    CR_SERVER_RPW_CTL_TYPE_WAIT_COMPLETE,
+    CR_SERVER_RPW_CTL_TYPE_TERM
+} CR_SERVER_RPW_CTL_TYPE;
+
+struct CR_SERVER_RPW_ENTRY;
+
+typedef struct CR_SERVER_RPW_CTL {
+    CR_SERVER_RPW_CTL_TYPE enmType;
+    int rc;
+    RTSEMEVENT hCompleteEvent;
+    /* valid for *_WAIT_COMPLETE and *_CANCEL */
+    struct CR_SERVER_RPW_ENTRY *pEntry;
+} CR_SERVER_RPW_CTL;
+
+
+struct CR_SERVER_RPW_ENTRY;
+
+typedef DECLCALLBACKPTR(void, PFNCR_SERVER_RPW_DATA) (const struct CR_SERVER_RPW_ENTRY* pEntry, void *pvEntryTexData);
+
+typedef DECLCALLBACKPTR(void, PFNCRSERVERNOTIFYEVENT) (int32_t screenId, uint32_t uEvent, void* pvData, uint32_t cbData);
+
+typedef struct CR_SERVER_RPW_ENTRY
+{
+    RTRECTSIZE Size;
+    /*  We have to use 4 textures here.
+     *
+     *  1. iDrawTex - the texture clients can draw to and then submit it for contents acquisition via crServerRpwEntrySubmit
+     *  2. iSubmittedTex - the texture submitted to the worker for processing and, whose processing has not start yet,
+     *     i.e. it is being in the queue and can be safely removed/replaced [from] there
+     *  3. iWorkerTex - the texture being prepared & passed by the worker to the GPU (stage 1 of a worker contents acquisition process)
+     *  4. iGpuTex - the texture passed/processed to/by the GPU, whose data is then acquired by the server (stage 2 of a worker contents acquisition process)
+     *
+     *  - There can be valid distinct iGpuTex, iWorkerTex, iSubmittedTex and iDrawTex present simultaneously.
+     *  - Either or both of iSubmittedTex and iFreeTex are always valid
+     *
+     *  Detail:
+     *
+     *  - iSubmittedTex and iFreeTex modifications are performed under CR_SERVER_RPW::CritSect lock.
+     *
+     *  - iDrawTex can only be changed by client side (i.e. the crServerRpwEntrySubmit caller), this is why client thread can access it w/o a lock
+     *  - iSubmittedTex and iFreeTex can be modified by both client and worker, so lock is always required
+     *
+     *  - iDrawTex can be accessed by client code only
+     *  - iWorkerTex and iGpuTex can be accessed by worker code only
+     *  - iSubmittedTex and iFreeTex can be accessed under CR_SERVER_RPW::CritSect lock only
+     *  - either or both of iSubmittedTex and iFreeTex are always valid (see below for more explanation),
+     *    this is why client can easily determine the new iDrawTex value on Submit, i.e. :
+     *
+     *          (if initial iSubmittedTex was valid)
+     *                ---------------
+     *                |              ^
+     *                >              |
+     *   Submit-> iDrawTex -> iSubmittedTex
+     *                ^
+     *                | (if initial iSubmittedTex was NOT valid)
+     *              iFreeTex
+     *
+     *  - The worker can invalidate the iSubmittedTex (i.e. do iSubmittedTex -> iWorkerTex) only after it is done
+     *    with the last iWorkerTex -> iGpuTex transformation freeing the previously used iGpuTex to iFreeTex.
+     *
+     *  - A simplified worker iXxxTex transformation logic is:
+     *    1. iFreeTex is initially valid
+     *    2. iSubmittedTex -> iWorkerTex;
+     *    3. submit iWorkerTex acquire request to the GPU
+     *    4. complete current iGpuTex
+     *    5. iGpuTex -> iFreeTex
+     *    6. iWorkerTex -> iGpuTex
+     *    7. goto 1
+     *
+     *  */
+    int8_t iTexDraw;
+    int8_t iTexSubmitted;
+    int8_t iTexWorker;
+    int8_t iTexGpu;
+    int8_t iCurPBO;
+    GLuint aidWorkerTexs[4];
+    GLuint aidPBOs[2];
+    RTLISTNODE WorkEntry;
+    RTLISTNODE WorkerWorkEntry;
+    RTLISTNODE GpuSubmittedEntry;
+    PFNCR_SERVER_RPW_DATA pfnData;
+} CR_SERVER_RPW_ENTRY;
+
+typedef struct CR_SERVER_RPW {
+    RTLISTNODE WorkList;
+    RTCRITSECT CritSect;
+    RTSEMEVENT hSubmitEvent;
+    /* only one outstanding command is supported,
+     * and ctl requests must be cynchronized, hold it right here */
+    CR_SERVER_RPW_CTL Ctl;
+    int ctxId;
+    GLint ctxVisBits;
+    RTTHREAD hThread;
+} CR_SERVER_RPW;
+/* */
+
+/* FRAMEBUFFER */
+typedef struct CR_FRAMEBUFFER *HCR_FRAMEBUFFER;
+typedef struct CR_FRAMEBUFFER_ENTRY *HCR_FRAMEBUFFER_ENTRY;
+/* */
+
+typedef struct CR_FBDATA
+{
+    HCR_FRAMEBUFFER hFb;
+    HCR_FRAMEBUFFER_ENTRY hFbEntry;
+    CR_TEXDATA* apTexDatas[2];
+} CR_FBDATA;
+/**
+ * Mural info
+ */
+typedef struct {
+    GLuint width, height;
+    GLint gX, gY;            /*guest coordinates*/
+    GLint hX, hY;            /*host coordinates, screenID related*/
+
+    int spuWindow;           /*the SPU's corresponding window ID */
+
+    int screenId;
+
+    GLboolean bVisible;      /*guest window is visible*/
+    GLubyte   u8Unused;       /*redirect to FBO instead of real host window*/
+    GLboolean bFbDraw;       /*GL_FRONT buffer is drawn to directly*/
+    GLboolean fIsDummyRefference;
+
+    GLint       cVisibleRects;    /*count of visible rects*/
+    GLint      *pVisibleRects;    /*visible rects left, top, right, bottom*/
+    GLboolean   bReceivedRects;   /*indicates if guest did any updates for visible regions*/
+
+    GLuint cBuffers;
+    GLuint iBbBuffer;
+    GLuint aidFBOs[2];
+    GLuint aidColorTexs[2];
+
+    void *pvReserved;
+
+    CRCreateInfoEx_t CreateInfo;
+
+    /* to avoid saved state breakage we need to keep RT_OFFSETOF(CRMuralInfo, CreateInfo) intact
+     * this is why we place some FBO stuff to the tail
+     * @todo: once we need to increment a saved state version, we could refactor this structure */
+    GLint iCurDrawBuffer;
+    GLint iCurReadBuffer;
+
+    GLuint idDepthStencilRB;
+    GLuint fboWidth, fboHeight;
+
+    GLboolean fHasParentWindow;
+
+    GLboolean fRedirected;
+    GLboolean fForcePresentState;
+    GLboolean fOrPresentOnReenable;
+
+    GLboolean fIsVisible;
+
+    CR_TEXDATA aTexs[2];
+    uint32_t cUsedFBDatas;
+    CR_FBDATA *apUsedFBDatas[CR_MAX_GUEST_MONITORS];
+    CR_FBDATA aFBDatas[CR_MAX_GUEST_MONITORS];
+
+    /* bitfield representing contexts the mural has been ever current with
+     * we just reuse CR_STATE_SHAREDOBJ_USAGE_XXX API here for simplicity */
+    CRbitvalue             ctxUsage[CR_MAX_BITARRAY];
+} CRMuralInfo;
+
+typedef struct {
+    CRContext *pContext;
+    int SpuContext;
+    CRCreateInfoEx_t CreateInfo;
+    CRMuralInfo * currentMural;
+} CRContextInfo;
+
+/**
+ * A client is basically an upstream Cr Node (connected via mothership)
+ */
+typedef struct _crclient {
+    int spu_id;        /**< id of the last SPU in the client's SPU chain */
+    CRConnection *conn;       /**< network connection from the client */
+    int number;        /**< a unique number for each client */
+    uint64_t pid;      /*guest pid*/
+    GLint currentContextNumber;
+    CRContextInfo *currentCtxInfo;
+    GLint currentWindow;
+    CRMuralInfo *currentMural;
+    GLint windowList[CR_MAX_WINDOWS];
+    GLint contextList[CR_MAX_CONTEXTS];
+#ifdef VBOXCR_LOGFPS
+    uint64_t timeUsed;
+#endif
+} CRClient;
+
+typedef struct _crclientnode {
+    CRClient *pClient;
+    struct _crclientnode *prev, *next;
+} CRClientNode;
+
+typedef struct CRPoly_t {
+    int npoints;
+    double *points;
+    struct CRPoly_t *next;
+} CRPoly;
+
+/**
+ * There's one of these run queue entries per client
+ * The run queue is a circular, doubly-linked list of these objects.
+ */
+typedef struct RunQueue_t {
+    CRClient *client;
+    int blocked;
+    struct RunQueue_t *next;
+    struct RunQueue_t *prev;
+} RunQueue;
+
+typedef struct {
+    GLint freeWindowID;
+    GLint freeContextID;
+    GLint freeClientID;
+} CRServerFreeIDsPool_t;
+
+typedef struct {
+    int32_t    x, y;
+    uint32_t   w, h;
+    uint64_t   winID;
+} CRScreenInfo;
+
+typedef struct {
+    RTRECT Rect;
+} CRScreenViewportInfo;
+
+/* BFB (BlitFramebuffer Blitter) flags
+ * so far only CR_SERVER_BFB_ON_ALWAIS is supported and is alwais used if any flag is set */
+#define CR_SERVER_BFB_DISABLED 0
+#define CR_SERVER_BFB_ON_INVERTED_BLIT 1
+#define CR_SERVER_BFB_ON_STRAIGHT_BLIT 2
+#define CR_SERVER_BFB_ON_ALWAIS (CR_SERVER_BFB_ON_INVERTED_BLIT | CR_SERVER_BFB_ON_STRAIGHT_BLIT)
+
+typedef struct {
+    unsigned short tcpip_port;
+
+    CRScreenInfo screen[CR_MAX_GUEST_MONITORS];
+    CRScreenViewportInfo screenVieport[CR_MAX_GUEST_MONITORS];
+    int          screenCount;
+
+    GLboolean fCrCmdEnabled;
+
+    GLboolean fProcessingPendedCommands;
+
+    int numClients;
+    CRClient *clients[CR_MAX_CLIENTS];  /**< array [numClients] */
+    CRClient *curClient;
+    CRClientNode *pCleanupClient;  /*list of clients with pending clean up*/
+    CRHTABLE clientTable;
+    CRCurrentStatePointers current;
+
+    GLboolean firstCallCreateContext;
+    GLboolean firstCallMakeCurrent;
+    GLboolean bIsInLoadingState; /* Indicates if we're in process of loading VM snapshot */
+    GLboolean bIsInSavingState; /* Indicates if we're in process of saving VM snapshot */
+    GLboolean bForceMakeCurrentOnClientSwitch;
+    CRContextInfo *currentCtxInfo;
+    GLint currentWindow;
+    GLint currentNativeWindow;
+    CRMuralInfo *currentMural;
+
+    CRHashTable *muralTable;  /**< hash table where all murals are stored */
+
+    int client_spu_id;
+
+    int mtu;
+    int buffer_size;
+    char protocol[1024];
+
+    SPU *head_spu;
+    SPUDispatchTable dispatch;
+
+    CRNetworkPointer return_ptr;
+    CRNetworkPointer writeback_ptr;
+    /*
+     * The current active unpacker state, this hack is required for the server dispatch routines
+     * (see crServerDispatchReadPixels for example) as it needs to read data from the buffer
+     * but it is not possible to supply the state as a parameter unfortunately.
+     */
+    PCrUnpackerState pUnpackerState;
+
+    CRLimitsState limits; /**< GL limits for any contexts we create */
+
+    CRContextInfo MainContextInfo;
+
+    CRHashTable *contextTable;  /**< hash table for rendering contexts */
+
+    CRHashTable *programTable;  /**< for vertex programs */
+    GLuint currentProgram;
+
+    /* visBits -> dummy mural association */
+    CRHashTable *dummyMuralTable;
+
+    /** State tracker state. */
+    CRStateTracker StateTracker;
+
+    GLboolean fRootVrOn;
+    VBOXVR_LIST RootVr;
+    /* we need to translate Root Vr to each window coords, this one cpecifies the current translation point
+     * note that since window attributes modifications is performed in HGCM thread only and thus is serialized,
+     * we deal with the global RootVr data directly */
+    RTPOINT RootVrCurPoint;
+
+    /* blitter so far used for working around host drivers BlitFramebuffer bugs
+     * by implementing */
+    uint32_t fBlitterMode;
+    CR_BLITTER Blitter;
+
+    CR_SERVER_RPW RpwWorker;
+
+    VBOXCRCMDCTL_HGCMDISABLE_DATA DisableData;
+
+    RTSEMEVENT hCalloutCompletionEvent;
+    VBOXCRCMDCTL *pCurrentCalloutCtl;
+    VBOXCRCLIENT_INFO ClientInfo;
+
+    /** configuration options */
+    /*@{*/
+    int useL2;
+    int ignore_papi;
+    unsigned int maxBarrierCount;
+    unsigned int clearCount;
+    int optimizeBucket;
+    int only_swap_once;
+    int debug_barriers;
+    int sharedDisplayLists;
+    int sharedTextureObjects;
+    int sharedPrograms;
+    int sharedWindows;
+    int uniqueWindows;
+    int localTileSpec;
+    int useDMX;
+    int overlapBlending;
+    int vpProjectionMatrixParameter;
+    const char *vpProjectionMatrixVariable;
+    int stereoView;
+    int vncMode;   /* cmd line option */
+    /*@}*/
+    /** view_matrix config */
+    /*@{*/
+    GLboolean viewOverride;
+    CRmatrix viewMatrix[2];  /**< left and right eye */
+    /*@}*/
+    /** projection_matrix config */
+    /*@{*/
+    GLboolean projectionOverride;
+    CRmatrix projectionMatrix[2];  /**< left and right eye */
+    int currentEye;
+    /*@}*/
+
+    /** for warped tiles */
+    /*@{*/
+    GLfloat alignment_matrix[16], unnormalized_alignment_matrix[16];
+    /*@}*/
+
+    /** tile overlap/blending info - this should probably be per-mural */
+    /*@{*/
+    CRPoly **overlap_geom;
+    CRPoly *overlap_knockout;
+    float *overlap_intens;
+    int num_overlap_intens;
+    int num_overlap_levels;
+    /*@}*/
+
+    CRHashTable *barriers, *semaphores;
+
+    RunQueue *run_queue;
+
+    GLuint currentSerialNo;
+
+    GLuint                fVisualBitsDefault;
+    GLboolean             bUsePBOForReadback;       /*Use PBO's for data readback*/
+
+    CROutputRedirect      outputRedirect;
+
+    GLboolean             bUseMultipleContexts;
+
+    GLboolean             bWindowsInitiallyHidden;
+
+    /* OR-ed CR_VBOX_CAP_XXX cap values
+     * describing VBox Chromium functionality caps visible to guest
+     * Currently can have only CR_VBOX_CAP_TEX_PRESENT cap to notify
+     * that the TexPresent mechanism is available and enabled */
+    uint32_t              u32Caps;
+
+    PFNCRSERVERNOTIFYEVENT pfnNotifyEventCB;
+
+    SPUDispatchTable TmpCtxDispatch;
+
+    VBOXCRCMD_SVRENABLE_INFO CrCmdClientInfo;
+
+#ifdef VBOX_WITH_CRSERVER_DUMPER
+    CR_RECORDER Recorder;
+    CR_BLITTER RecorderBlitter;
+    CR_DBGPRINT_DUMPER DbgPrintDumper;
+    CR_HTML_DUMPER HtmlDumper;
+    CR_DUMPER *pDumper;
+#endif
+
+    int RcToGuest;
+    int RcToGuestOnce;
+} CRServer;
+
+
+extern DECLEXPORT(void) crServerInit( int argc, char *argv[] );
+extern DECLEXPORT(int)  CRServerMain( int argc, char *argv[] );
+extern DECLEXPORT(void) crServerServiceClients(void);
+extern DECLEXPORT(void) crServerAddNewClient(void);
+extern DECLEXPORT(SPU*) crServerHeadSPU(void);
+extern DECLEXPORT(void) crServerSetPort(int port);
+
+extern DECLEXPORT(GLboolean) crVBoxServerInit(void);
+extern DECLEXPORT(void) crVBoxServerTearDown(void);
+extern DECLEXPORT(int32_t) crVBoxServerAddClient(uint32_t u32ClientID);
+extern DECLEXPORT(void) crVBoxServerRemoveClient(uint32_t u32ClientID);
+extern DECLEXPORT(int32_t) crVBoxServerClientWrite(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t cbBuffer);
+extern DECLEXPORT(int32_t) crVBoxServerClientRead(uint32_t u32ClientID, uint8_t *pBuffer, uint32_t *pcbBuffer);
+extern DECLEXPORT(int32_t) crVBoxServerClientSetVersion(uint32_t u32ClientID, uint32_t vMajor, uint32_t vMinor);
+extern DECLEXPORT(int32_t) crVBoxServerClientGetCapsLegacy(uint32_t u32ClientID, uint32_t *pu32Caps);
+extern DECLEXPORT(int32_t) crVBoxServerClientGetCapsNew(uint32_t u32ClientID, CR_CAPS_INFO *pInfo);
+extern DECLEXPORT(int32_t) crVBoxServerClientSetPID(uint32_t u32ClientID, uint64_t pid);
+
+extern DECLEXPORT(int32_t) crVBoxServerSaveState(PSSMHANDLE pSSM);
+extern DECLEXPORT(int32_t) crVBoxServerLoadState(PSSMHANDLE pSSM, uint32_t version);
+
+typedef struct
+{
+    CR_BLITTER_IMG Img;
+    uint32_t u32Screen;
+    uint32_t fDataAllocated;
+} CR_SCREENSHOT;
+
+extern DECLEXPORT(int) crServerVBoxWindowsShow(bool fShow);
+extern DECLEXPORT(int) crServerVBoxScreenshotGet(uint32_t u32Screen, uint32_t width, uint32_t height, uint32_t pitch, void *pvBuffer, CR_SCREENSHOT *pScreenshot);
+extern DECLEXPORT(void) crServerVBoxScreenshotRelease(CR_SCREENSHOT *pScreenshot);
+
+extern DECLEXPORT(void) crServerVBoxCompositionSetEnableStateGlobal(GLboolean fEnable);
+extern DECLEXPORT(int32_t) crVBoxServerSetScreenCount(int sCount);
+extern DECLEXPORT(int32_t) crVBoxServerUnmapScreen(int sIndex);
+extern DECLEXPORT(int32_t) crVBoxServerMapScreen(int sIndex, int32_t x, int32_t y, uint32_t w, uint32_t h, uint64_t winID);
+extern DECLEXPORT(void) crServerVBoxCompositionSetEnableStateGlobal(GLboolean fEnable);
+struct VBVAINFOSCREEN;
+extern DECLEXPORT(int) crVBoxServerNotifyResize(const struct VBVAINFOSCREEN *pScreen, void *pvVRAM);
+extern DECLEXPORT(int32_t) crVBoxServerSetRootVisibleRegion(GLint cRects, const RTRECT *pRects);
+
+extern DECLEXPORT(int32_t) crVBoxServerSetOffscreenRendering(GLboolean value);
+
+extern DECLEXPORT(int32_t) crVBoxServerOutputRedirectSet(const CROutputRedirect *pCallbacks);
+
+extern DECLEXPORT(int32_t) crVBoxServerSetScreenViewport(int sIndex, int32_t x, int32_t y, uint32_t w, uint32_t h);
+
+extern DECLEXPORT(void) crServerVBoxSetNotifyEventCB(PFNCRSERVERNOTIFYEVENT pfnCb);
+
+extern DECLEXPORT(void) crVBoxServerCalloutEnable(VBOXCRCMDCTL *pCtl);
+extern DECLEXPORT(void) crVBoxServerCalloutDisable(void);
+extern DECLEXPORT(void) crServerSetUnscaledHiDPI(bool fEnable);
+
+#ifdef VBOX_WITH_CRHGSMI
+/* We moved all CrHgsmi command processing to crserverlib to keep the logic of dealing with CrHgsmi commands in one place.
+ *
+ * For now we need the notion of CrHgdmi commands in the crserver_lib to be able to complete it asynchronously once it is really processed.
+ * This help avoiding the "blocked-client" issues. The client is blocked if another client is doing begin-end stuff.
+ * For now we eliminated polling that could occur on block, which caused a higher-priority thread (in guest) polling for the blocked command complition
+ * to block the lower-priority thread trying to complete the blocking command.
+ * And removed extra memcpy done on blocked command arrival.
+ *
+ * In the future we will extend CrHgsmi functionality to maintain texture data directly in CrHgsmi allocation to avoid extra memcpy-ing with PBO,
+ * implement command completion and stuff necessary for GPU scheduling to work properly for WDDM Windows guests, etc.
+ *
+ * NOTE: it is ALWAYS responsibility of the crVBoxServerCrHgsmiCmd to complete the command!
+ * */
+extern DECLEXPORT(int32_t) crVBoxServerCrHgsmiCmd(struct VBOXVDMACMD_CHROMIUM_CMD *pCmd, uint32_t cbCmd);
+extern DECLEXPORT(int32_t) crVBoxServerCrHgsmiCtl(struct VBOXVDMACMD_CHROMIUM_CTL *pCtl, uint32_t cbCtl);
+
+#endif
+
+extern DECLEXPORT(int32_t) crVBoxServerHgcmEnable(VBOXCRCMDCTL_HGCMENABLE_DATA *pData);
+extern DECLEXPORT(int32_t) crVBoxServerHgcmDisable(VBOXCRCMDCTL_HGCMDISABLE_DATA *pData);
+
+extern int crVBoxServerHostCtl(VBOXCRCMDCTL *pCtl, uint32_t cbCtl);
+
+extern DECLEXPORT(void) crVBoxServerDetachThread(void);
+extern DECLEXPORT(void) crVBoxServerAttachThread(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_spu.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_spu.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_spu.h	(revision 86648)
@@ -0,0 +1,418 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+#ifndef CR_SPU_H
+#define CR_SPU_H
+
+#ifdef WINDOWS
+#define SPULOAD_APIENTRY __stdcall
+#else
+#define SPULOAD_APIENTRY
+#endif
+
+#include "cr_dll.h"
+#include "spu_dispatch_table.h"
+#include "cr_net.h"
+
+#include <iprt/types.h>
+
+#ifdef DARWIN
+# include <OpenGL/OpenGL.h>
+#endif
+
+#define SPU_ENTRY_POINT_NAME "SPULoad"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAX_THREADS               32      /**< max threads per spu */
+
+typedef struct _SPUSTRUCT SPU;
+
+typedef void (*SPUGenericFunction)(void);
+
+/**
+ * SPU Named function descriptor
+ */
+typedef struct {
+    char *name;
+    SPUGenericFunction fn;
+} SPUNamedFunctionTable;
+
+/**
+ * SPU function table descriptor
+ */
+typedef struct {
+    SPUDispatchTable *childCopy;
+    void *data;
+    SPUNamedFunctionTable *table;
+} SPUFunctions;
+
+/** Init spu */
+typedef SPUFunctions *(*SPUInitFuncPtr)(int id, SPU *child,
+        SPU *super, unsigned int, unsigned int );
+typedef void (*SPUSelfDispatchFuncPtr)(SPUDispatchTable *);
+/** Cleanup spu */
+typedef int (*SPUCleanupFuncPtr)(void);
+/** Load spu */
+typedef int (*SPULoadFunction)(char **, char **, void *, void *, void *, int *);
+
+
+/**
+ * masks for spu_flags
+ */
+#define SPU_PACKER_MASK           0x1
+#define SPU_NO_PACKER             0x0
+#define SPU_HAS_PACKER            0x1
+#define SPU_TERMINAL_MASK         0x2
+#define SPU_NOT_TERMINAL          0x0
+#define SPU_IS_TERMINAL           0x2
+#define SPU_MAX_SERVERS_MASK      0xc
+#define SPU_MAX_SERVERS_ZERO      0x0
+#define SPU_MAX_SERVERS_ONE       0x4
+#define SPU_MAX_SERVERS_UNLIMITED 0x8
+
+/**
+ * SPU registration restructure.
+ */
+typedef struct SPUREG
+{
+    /** SPU name. */
+    const char             *pszName;
+    /** Name of the SPU super class. */
+    const char             *pszSuperName;
+    /** SPU flags. */
+    uint32_t               fFlags;
+    /** Init function. */
+    SPUInitFuncPtr         pfnInit;
+    /** Dispatch function. */
+    SPUSelfDispatchFuncPtr pfnDispatch; 
+    /** Cleanup function. */
+    SPUCleanupFuncPtr      pfnCleanup;
+} SPUREG;
+/** Pointer to a SPU registration structure. */
+typedef SPUREG *PSPUREG;
+/** Pointer to a const SPU registration structure. */
+typedef const SPUREG *PCSPUREG;
+
+/**
+ * SPU descriptor
+ */
+struct _SPUSTRUCT {
+    char *name;         /**< Name of the spu */
+    char *super_name;       /**< Name of the super class of the spu */
+    int id;             /**< Id num of the spu */
+        int spu_flags;          /**< options fags for the SPU */
+    struct _SPUSTRUCT *superSPU;    /**< Pointer to the descriptor for the super class */
+    CRDLL *dll;         /**< pointer to shared lib for spu */
+    SPULoadFunction entry_point;    /**< SPU's entry point (SPULoad()) */
+    SPUInitFuncPtr init;        /**< SPU init function */
+    SPUSelfDispatchFuncPtr self;    /**< */
+    SPUCleanupFuncPtr cleanup;  /**< SPU cleanup func */
+    SPUFunctions *function_table;   /**< Function table for spu */
+    SPUDispatchTable dispatch_table;
+    void *privatePtr;       /**< pointer to SPU-private data */
+};
+
+
+/**
+ * These are the OpenGL / window system interface functions
+ */
+#if defined(WINDOWS)
+/**
+ * Windows/WGL
+ */
+/*@{*/
+typedef HGLRC (WGL_APIENTRY *wglCreateContextFunc_t)(HDC);
+typedef void (WGL_APIENTRY *wglDeleteContextFunc_t)(HGLRC);
+typedef BOOL (WGL_APIENTRY *wglShareListsFunc_t)(HGLRC,HGLRC);
+typedef BOOL (WGL_APIENTRY *wglMakeCurrentFunc_t)(HDC,HGLRC);
+typedef BOOL (WGL_APIENTRY *wglSwapBuffersFunc_t)(HDC);
+typedef int (WGL_APIENTRY *wglChoosePixelFormatFunc_t)(HDC, CONST PIXELFORMATDESCRIPTOR *);
+typedef BOOL (WGL_APIENTRY *wglChoosePixelFormatEXTFunc_t)(HDC, const int *, const FLOAT *, UINT, int *, UINT *);
+typedef int (WGL_APIENTRY *wglDescribePixelFormatFunc_t)(HDC, int, UINT, CONST PIXELFORMATDESCRIPTOR *);
+typedef int (WGL_APIENTRY *wglSetPixelFormatFunc_t)(HDC, int, CONST PIXELFORMATDESCRIPTOR *);
+typedef HGLRC (WGL_APIENTRY *wglGetCurrentContextFunc_t)(void);
+typedef PROC (WGL_APIENTRY *wglGetProcAddressFunc_t)(LPCSTR Arg1);
+typedef BOOL (WGL_APIENTRY *wglChoosePixelFormatEXTFunc_t)(HDC, const int *, const FLOAT *, UINT, int *, UINT *);
+typedef BOOL (WGL_APIENTRY *wglGetPixelFormatAttribivEXTFunc_t)(HDC, int, int, UINT, int *, int *);
+typedef BOOL (WGL_APIENTRY *wglGetPixelFormatAttribfvEXTFunc_t)(HDC, int, int, UINT, int *, float *);
+typedef const GLubyte *(WGL_APIENTRY *glGetStringFunc_t)( GLenum );
+typedef const GLubyte *(WGL_APIENTRY *wglGetExtensionsStringEXTFunc_t)(void);
+typedef const GLubyte *(WGL_APIENTRY *wglGetExtensionsStringARBFunc_t)(HDC);
+/*@}*/
+#elif defined(DARWIN)
+typedef const GLubyte *(*glGetStringFunc_t)( GLenum );
+/*@}*/
+
+/**
+ * Apple/CGL
+ */
+/*@{*/
+typedef CGLError (*CGLSetCurrentContextFunc_t)( CGLContextObj );
+typedef CGLContextObj (*CGLGetCurrentContextFunc_t)();
+
+typedef CGLError (*CGLChoosePixelFormatFunc_t)( const CGLPixelFormatAttribute *, CGLPixelFormatObj *, long * );
+typedef CGLError (*CGLDestroyPixelFormatFunc_t)( CGLPixelFormatObj );
+typedef CGLError (*CGLDescribePixelFormatFunc_t)( CGLPixelFormatObj , long , CGLPixelFormatAttribute , long * );
+
+typedef CGLError (*CGLQueryRendererInfoFunc_t)( unsigned long, CGLRendererInfoObj *, long * );
+typedef CGLError (*CGLDestroyRendererInfoFunc_t)( CGLRendererInfoObj );
+typedef CGLError (*CGLDescribeRendererFunc_t)( CGLRendererInfoObj, long, CGLRendererProperty, long * );
+
+typedef CGLError (*CGLCreateContextFunc_t)( CGLPixelFormatObj, CGLContextObj, CGLContextObj * );
+typedef CGLError (*CGLDestroyContextFunc_t)( CGLContextObj );
+typedef CGLError (*CGLCopyContextFunc_t)( CGLContextObj src, CGLContextObj, unsigned long );
+
+typedef CGLError (*CGLCreatePBufferFunc_t)( long, long, unsigned long, unsigned long, long, CGLPBufferObj * ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
+typedef CGLError (*CGLDestroyPBufferFunc_t)( CGLPBufferObj ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
+typedef CGLError (*CGLDescribePBufferFunc_t)( CGLPBufferObj, long *, long *, unsigned long *, unsigned long *, long * ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
+typedef CGLError (*CGLTexImagePBufferFunc_t)( CGLContextObj, CGLPBufferObj, unsigned long ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
+
+typedef CGLError (*CGLSetOffScreenFunc_t)( CGLContextObj, long, long, long, void * );
+typedef CGLError (*CGLGetOffScreenFunc_t)( CGLContextObj, long *, long *, long *, void ** );
+typedef CGLError (*CGLSetFullScreenFunc_t)( CGLContextObj );
+
+typedef CGLError (*CGLSetPBufferFunc_t)( CGLContextObj, CGLPBufferObj, unsigned long, long, long ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
+typedef CGLError (*CGLGetPBufferFunc_t)( CGLContextObj, CGLPBufferObj *, unsigned long *, long *, long * ) AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER;
+
+typedef CGLError (*CGLClearDrawableFunc_t)( CGLContextObj );
+typedef CGLError (*CGLFlushDrawableFunc_t)( CGLContextObj ); /* <-- swap buffers */
+
+typedef CGLError (*CGLEnableFunc_t)( CGLContextObj, CGLContextEnable );
+typedef CGLError (*CGLDisableFunc_t)( CGLContextObj, CGLContextEnable );
+typedef CGLError (*CGLIsEnabledFunc_t)( CGLContextObj, CGLContextEnable, long * );
+
+typedef CGLError (*CGLSetParameterFunc_t)( CGLContextObj, CGLContextParameter, const long * );
+typedef CGLError (*CGLGetParameterFunc_t)( CGLContextObj, CGLContextParameter, long * );
+
+typedef CGLError (*CGLSetVirtualScreenFunc_t)( CGLContextObj, long );
+typedef CGLError (*CGLGetVirtualScreenFunc_t)( CGLContextObj, long *);
+
+typedef CGLError (*CGLSetOptionFunc_t)( CGLGlobalOption, long );
+typedef CGLError (*CGLGetOptionFunc_t)( CGLGlobalOption, long * );
+typedef void (*CGLGetVersionFunc_t)( long *, long * );
+
+typedef const char * (*CGLErrorStringFunc_t)( CGLError );
+
+/** XXX \todo Undocumented CGL functions. Are these all correct? */
+typedef void *CGSConnectionID;
+typedef int CGSWindowID;
+typedef int CGSSurfaceID;
+
+typedef CGLError (*CGLSetSurfaceFunc_t)( CGLContextObj, CGSConnectionID, CGSWindowID, CGSSurfaceID );
+typedef CGLError (*CGLGetSurfaceFunc_t)( CGLContextObj, CGSConnectionID, CGSWindowID, CGSSurfaceID* );
+typedef CGLError (*CGLUpdateContextFunc_t)( CGLContextObj );
+/*@}*/
+#else
+/**
+ * X11/GLX
+ */
+/*@{*/
+typedef int (*glXGetConfigFunc_t)( Display *, XVisualInfo *, int, int * );
+typedef Bool (*glXQueryExtensionFunc_t) (Display *, int *, int * );
+typedef const char *(*glXQueryExtensionsStringFunc_t) (Display *, int );
+typedef Bool (*glXQueryVersionFunc_t)( Display *dpy, int *maj, int *min );
+typedef XVisualInfo *(*glXChooseVisualFunc_t)( Display *, int, int * );
+typedef GLXContext (*glXCreateContextFunc_t)( Display *, XVisualInfo *, GLXContext, Bool );
+typedef void (*glXUseXFontFunc_t)(Font font, int first, int count, int listBase);
+typedef void (*glXDestroyContextFunc_t)( Display *, GLXContext );
+typedef Bool (*glXIsDirectFunc_t)( Display *, GLXContext );
+typedef Bool (*glXMakeCurrentFunc_t)( Display *, GLXDrawable, GLXContext );
+typedef void (*glXSwapBuffersFunc_t)( Display *, GLXDrawable );
+typedef CR_GLXFuncPtr (*glXGetProcAddressARBFunc_t)( const GLubyte *name );
+typedef Display *(*glXGetCurrentDisplayFunc_t)( void );
+typedef GLXContext (*glXGetCurrentContextFunc_t)( void );
+typedef GLXDrawable (*glXGetCurrentDrawableFunc_t)( void );
+typedef char * (*glXGetClientStringFunc_t)( Display *dpy, int name );
+typedef void (*glXWaitGLFunc_t)(void);
+typedef void (*glXWaitXFunc_t)(void);
+typedef void (*glXCopyContextFunc_t)(Display *dpy, GLXContext src, GLXContext dst, unsigned long mask );
+typedef const GLubyte *(*glGetStringFunc_t)( GLenum );
+typedef Bool (*glXJoinSwapGroupNVFunc_t)(Display *dpy, GLXDrawable drawable, GLuint group);
+typedef Bool (*glXBindSwapBarrierNVFunc_t)(Display *dpy, GLuint group, GLuint barrier);
+typedef Bool (*glXQuerySwapGroupNVFunc_t)(Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
+typedef Bool (*glXQueryMaxSwapGroupsNVFunc_t)(Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
+typedef Bool (*glXQueryFrameCountNVFunc_t)(Display *dpy, int screen, GLuint *count);
+typedef Bool (*glXResetFrameCountNVFunc_t)(Display *dpy, int screen);
+#ifdef GLX_VERSION_1_3
+typedef GLXContext (*glXCreateNewContextFunc_t)( Display *dpy, GLXFBConfig config, int renderType, GLXContext shareList, Bool direct );
+typedef GLXWindow (*glXCreateWindowFunc_t)(Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+typedef Bool (*glXMakeContextCurrentFunc_t)( Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx );
+typedef GLXFBConfig *(*glXChooseFBConfigFunc_t)( Display *dpy, int screen, const int *attribList, int *nitems );
+typedef GLXFBConfig *(*glXGetFBConfigsFunc_t)(Display *dpy, int screen, int *nelements);
+typedef int (*glXGetFBConfigAttribFunc_t)(Display *dpy, GLXFBConfig config, int attribute, int *value);
+typedef XVisualInfo *(*glXGetVisualFromFBConfigFunc_t)(Display *dpy, GLXFBConfig config);
+typedef GLXPbuffer (*glXCreatePbufferFunc_t)( Display *dpy, GLXFBConfig config, const int *attribList );
+typedef void (*glXDestroyPbufferFunc_t)( Display *dpy, GLXPbuffer pbuf );
+typedef int (*glXQueryContextFunc_t)(Display *dpy, GLXContext ctx, int attribute, int *value);
+typedef void (*glXQueryDrawableFunc_t)(Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+#endif /* GLX_VERSION_1_3 */
+/*@}*/
+#endif
+
+
+/**
+ * Package up the WGL/AGL/CGL/GLX function pointers into a struct.  We use
+ * this in a few different places.
+ */
+typedef struct {
+#if defined(WINDOWS)
+    wglGetProcAddressFunc_t wglGetProcAddress;
+    wglCreateContextFunc_t wglCreateContext;
+    wglDeleteContextFunc_t wglDeleteContext;
+    wglShareListsFunc_t wglShareLists;
+    wglMakeCurrentFunc_t wglMakeCurrent;
+    wglSwapBuffersFunc_t wglSwapBuffers;
+    wglGetCurrentContextFunc_t wglGetCurrentContext;
+    wglChoosePixelFormatFunc_t wglChoosePixelFormat;
+    wglDescribePixelFormatFunc_t wglDescribePixelFormat;
+    wglSetPixelFormatFunc_t wglSetPixelFormat;
+    wglChoosePixelFormatEXTFunc_t wglChoosePixelFormatEXT;
+    wglGetPixelFormatAttribivEXTFunc_t wglGetPixelFormatAttribivEXT;
+    wglGetPixelFormatAttribfvEXTFunc_t wglGetPixelFormatAttribfvEXT;
+    wglGetExtensionsStringEXTFunc_t wglGetExtensionsStringEXT;
+#elif defined(DARWIN)
+    CGLChoosePixelFormatFunc_t      CGLChoosePixelFormat;
+    CGLDestroyPixelFormatFunc_t     CGLDestroyPixelFormat;
+    CGLDescribePixelFormatFunc_t    CGLDescribePixelFormat;
+    CGLQueryRendererInfoFunc_t      CGLQueryRendererInfo;
+    CGLDestroyRendererInfoFunc_t    CGLDestroyRendererInfo;
+    CGLDescribeRendererFunc_t       CGLDescribeRenderer;
+    CGLCreateContextFunc_t          CGLCreateContext;
+    CGLDestroyContextFunc_t         CGLDestroyContext;
+    CGLCopyContextFunc_t            CGLCopyContext;
+    CGLSetCurrentContextFunc_t      CGLSetCurrentContext;
+    CGLGetCurrentContextFunc_t      CGLGetCurrentContext;
+    CGLCreatePBufferFunc_t          CGLCreatePBuffer;
+    CGLDestroyPBufferFunc_t         CGLDestroyPBuffer;
+    CGLDescribePBufferFunc_t        CGLDescribePBuffer;
+    CGLTexImagePBufferFunc_t        CGLTexImagePBuffer;
+    CGLSetOffScreenFunc_t           CGLSetOffScreen;
+    CGLGetOffScreenFunc_t           CGLGetOffScreen;
+    CGLSetFullScreenFunc_t          CGLSetFullScreen;
+    CGLSetPBufferFunc_t             CGLSetPBuffer;
+    CGLGetPBufferFunc_t             CGLGetPBuffer;
+    CGLClearDrawableFunc_t          CGLClearDrawable;
+    CGLFlushDrawableFunc_t          CGLFlushDrawable;
+    CGLEnableFunc_t                 CGLEnable;
+    CGLDisableFunc_t                CGLDisable;
+    CGLIsEnabledFunc_t              CGLIsEnabled;
+    CGLSetParameterFunc_t           CGLSetParameter;
+    CGLGetParameterFunc_t           CGLGetParameter;
+    CGLSetVirtualScreenFunc_t       CGLSetVirtualScreen;
+    CGLGetVirtualScreenFunc_t       CGLGetVirtualScreen;
+    CGLSetOptionFunc_t              CGLSetOption;
+    CGLGetOptionFunc_t              CGLGetOption;
+    CGLGetVersionFunc_t             CGLGetVersion;
+    CGLErrorStringFunc_t            CGLErrorString;
+
+    CGLSetSurfaceFunc_t             CGLSetSurface;
+    CGLGetSurfaceFunc_t             CGLGetSurface;
+    CGLUpdateContextFunc_t          CGLUpdateContext;
+#else
+    glXGetConfigFunc_t  glXGetConfig;
+    glXQueryExtensionFunc_t glXQueryExtension;
+    glXQueryVersionFunc_t glXQueryVersion;
+    glXQueryExtensionsStringFunc_t glXQueryExtensionsString;
+    glXChooseVisualFunc_t glXChooseVisual;
+    glXCreateContextFunc_t glXCreateContext;
+    glXDestroyContextFunc_t glXDestroyContext;
+    glXUseXFontFunc_t glXUseXFont;
+    glXIsDirectFunc_t glXIsDirect;
+    glXMakeCurrentFunc_t glXMakeCurrent;
+    glXSwapBuffersFunc_t glXSwapBuffers;
+    glXGetProcAddressARBFunc_t glXGetProcAddressARB;
+    glXGetCurrentDisplayFunc_t glXGetCurrentDisplay;
+    glXGetCurrentContextFunc_t glXGetCurrentContext;
+    glXGetCurrentDrawableFunc_t glXGetCurrentDrawable;
+    glXGetClientStringFunc_t glXGetClientString;
+    glXWaitGLFunc_t glXWaitGL;
+    glXWaitXFunc_t glXWaitX;
+    glXCopyContextFunc_t glXCopyContext;
+    /* GLX_NV_swap_group */
+    glXJoinSwapGroupNVFunc_t glXJoinSwapGroupNV;
+    glXBindSwapBarrierNVFunc_t glXBindSwapBarrierNV;
+    glXQuerySwapGroupNVFunc_t glXQuerySwapGroupNV;
+    glXQueryMaxSwapGroupsNVFunc_t glXQueryMaxSwapGroupsNV;
+    glXQueryFrameCountNVFunc_t glXQueryFrameCountNV;
+    glXResetFrameCountNVFunc_t glXResetFrameCountNV;
+#ifdef GLX_VERSION_1_3
+    glXCreateNewContextFunc_t glXCreateNewContext;
+    glXCreateWindowFunc_t glXCreateWindow;
+    glXMakeContextCurrentFunc_t glXMakeContextCurrent;
+    glXChooseFBConfigFunc_t glXChooseFBConfig;
+    glXGetFBConfigsFunc_t glXGetFBConfigs;
+    glXGetFBConfigAttribFunc_t glXGetFBConfigAttrib;
+    glXGetVisualFromFBConfigFunc_t glXGetVisualFromFBConfig;
+    glXCreatePbufferFunc_t glXCreatePbuffer;
+    glXDestroyPbufferFunc_t glXDestroyPbuffer;
+    glXQueryContextFunc_t glXQueryContext;
+    glXQueryDrawableFunc_t glXQueryDrawable;
+#endif
+#endif
+    glGetStringFunc_t glGetString;
+} crOpenGLInterface;
+
+
+/** This is the one required function in _all_ SPUs */
+DECLEXPORT(int) SPULoad( char **name, char **super, SPUInitFuncPtr *init,
+                    SPUSelfDispatchFuncPtr *self, SPUCleanupFuncPtr *cleanup,
+                    int *flags );
+
+DECLEXPORT(SPU *) crSPULoad( SPU *child, int id, char *name, char *dir, void *server);
+DECLEXPORT(SPU *) crSPULoadChain( int count, int *ids, char **names, char *dir, void *server );
+DECLEXPORT(void) crSPUUnloadChain(SPU *headSPU);
+
+DECLEXPORT(SPU *) crSPUInitFromReg(SPU *pSpuChild, int iId, const char *pszName, void *pvServer, PCSPUREG *papSpuReg);
+DECLEXPORT(SPU *) crSPUInitChainFromReg(int cSpus, int *paIds, const char * const *papszNames, void *server, PCSPUREG *papSpuReg);
+
+DECLEXPORT(void) crSPUInitDispatchTable( SPUDispatchTable *table );
+DECLEXPORT(void) crSPUCopyDispatchTable( SPUDispatchTable *dst, SPUDispatchTable *src );
+DECLEXPORT(void) crSPUChangeInterface( SPUDispatchTable *table, void *origFunc, void *newFunc );
+
+
+DECLEXPORT(SPUGenericFunction) crSPUFindFunction( const SPUNamedFunctionTable *table, const char *fname );
+DECLEXPORT(void) crSPUInitDispatch( SPUDispatchTable *dispatch, const SPUNamedFunctionTable *table );
+DECLEXPORT(void) crSPUInitDispatchNops(SPUDispatchTable *table);
+
+DECLEXPORT(int) crLoadOpenGL( crOpenGLInterface *crInterface, SPUNamedFunctionTable table[] );
+DECLEXPORT(void) crUnloadOpenGL( void );
+DECLEXPORT(int) crLoadOpenGLExtensions( const crOpenGLInterface *crInterface, SPUNamedFunctionTable table[] );
+DECLEXPORT(void) crSPUChangeDispatch(SPUDispatchTable *dispatch, const SPUNamedFunctionTable *newtable);
+
+#if defined(GLX)
+DECLEXPORT(XVisualInfo *)
+crChooseVisual(const crOpenGLInterface *ws, Display *dpy, int screen,
+                             GLboolean directColor, int visBits);
+#else
+DECLEXPORT(int)
+crChooseVisual(const crOpenGLInterface *ws, int visBits);
+#endif
+
+
+#ifdef USE_OSMESA
+DECLEXPORT(int)
+crLoadOSMesa( OSMesaContext (**createContext)( GLenum format, OSMesaContext sharelist ),
+              GLboolean (**makeCurrent)( OSMesaContext ctx, GLubyte *buffer,
+                         GLenum type, GLsizei width, GLsizei height ),
+              void (**destroyContext)( OSMesaContext ctx ));
+#endif
+
+extern DECLHIDDEN(const SPUREG) g_ErrorSpuReg;
+#ifdef IN_GUEST
+extern DECLHIDDEN(const SPUREG) g_FeedbackSpuReg;
+extern DECLHIDDEN(const SPUREG) g_PassthroughSpuReg;
+extern DECLHIDDEN(const SPUREG) g_PackSpuReg;
+#else
+extern DECLHIDDEN(const SPUREG) g_RenderSpuReg;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_SPU_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_string.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_string.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_string.h	(revision 86648)
@@ -0,0 +1,67 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STRING_H
+#define CR_STRING_H
+
+#include <iprt/cdefs.h>
+#include <iprt/types.h>
+
+RT_C_DECLS_BEGIN
+
+DECLEXPORT(char *)  crStrdup( const char *str );
+DECLEXPORT(char *)  crStrndup( const char *str, unsigned int len );
+DECLEXPORT(int)     crStrlen( const char *str );
+DECLEXPORT(int)     crStrcmp( const char *str1, const char *str2 );
+DECLEXPORT(int)     crStrncmp( const char *str1, const char *str2, int n );
+DECLEXPORT(int)     crStrcasecmp( const char *str1, const char *str2 );
+DECLEXPORT(void)    crStrcpy( char *dst, const char *src );
+DECLEXPORT(void)    crStrncpy( char *dst, const char *src, unsigned int len );
+DECLEXPORT(void)    crStrcat( char *dst, const char *src );
+DECLEXPORT(char *)  crStrjoin( const char *src1, const char *src2 );
+DECLEXPORT(char *)  crStrjoin3( const char *src1, const char *src2, const char *src3 );
+DECLEXPORT(char *)  crStrstr( const char *str, const char *pat );
+DECLEXPORT(char *)  crStrchr( const char *str, char c );
+DECLEXPORT(char *)  crStrrchr( const char *str, char c );
+DECLEXPORT(int)     crStrToInt( const char *str );
+DECLEXPORT(float)   crStrToFloat( const char *str );
+DECLEXPORT(char **) crStrSplit( const char *str, const char *splitstr );
+DECLEXPORT(char **) crStrSplitn( const char *str, const char *splitstr, int n );
+DECLEXPORT(void)    crFreeStrings( char **strings );
+DECLEXPORT(char *)  crStrIntersect( const char *s1, const char *s2 );
+DECLEXPORT(int)     crIsDigit( char c );
+
+DECLEXPORT(void)    crBytesToString( char *string, int nstring, void *data, int ndata );
+DECLEXPORT(void)    crWordsToString( char *string, int nstring, void *data, int ndata );
+
+#define CR_GLVERSION_OFFSET_MAJOR (24)
+#define CR_GLVERSION_OFFSET_MINOR (16)
+#define CR_GLVERSION_OFFSET_BUILD (0)
+
+#define CR_GLVERSION_MAX_MAJOR (0x7f)
+#define CR_GLVERSION_MAX_MINOR (0xff)
+#define CR_GLVERSION_MAX_BUILD (0xffff)
+
+#define CR_GLVERSION_MASK_MAJOR (CR_GLVERSION_MAX_MAJOR << CR_GLVERSION_OFFSET_MAJOR)
+#define CR_GLVERSION_MASK_MINOR (CR_GLVERSION_MAX_MINOR << CR_GLVERSION_OFFSET_MINOR)
+#define CR_GLVERSION_MASK_BUILD (CR_GLVERSION_MAX_BUILD << CR_GLVERSION_OFFSET_BUILD)
+
+#define CR_GLVERSION_COMPOSE_EL(_val, _type) (((_val) << CR_GLVERSION_OFFSET_##_type) & CR_GLVERSION_MASK_##_type)
+
+#define CR_GLVERSION_COMPOSE(_maj, _min, _build) (CR_GLVERSION_COMPOSE_EL((_maj), MAJOR) \
+        + CR_GLVERSION_COMPOSE_EL((_min), MINOR) \
+        + CR_GLVERSION_COMPOSE_EL((_build), BUILD))
+
+#define CR_GLVERSION_GET_EL(_val, _type) (((_val) & CR_GLVERSION_MASK_##_type) >> CR_GLVERSION_OFFSET_##_type)
+#define CR_GLVERSION_GET_MAJOR(_val) CR_GLVERSION_GET_EL((_val), MAJOR)
+#define CR_GLVERSION_GET_MINOR(_val) CR_GLVERSION_GET_EL((_val), MINOR)
+#define CR_GLVERSION_GET_BUILD(_val) CR_GLVERSION_GET_EL((_val), BUILD)
+
+DECLEXPORT(int) crStrParseGlVersion(const char * ver);
+DECLEXPORT(int32_t) crStrParseI32(const char *pszStr, const int32_t defaultVal);
+RT_C_DECLS_END
+
+#endif /* CR_STRING_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_threads.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_threads.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_threads.h	(revision 86648)
@@ -0,0 +1,118 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+	
+#ifndef CR_THREADS_H
+#define CR_THREADS_H
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "chromium.h"
+#include "cr_bits.h"
+
+#ifdef WINDOWS
+#define WIN32_LEAN_AND_MEAN
+# ifdef VBOX
+#  include <iprt/win/windows.h>
+# else
+#include <windows.h>
+# endif
+#else
+#include <pthread.h>
+#include <semaphore.h>
+#endif
+
+#include "cr_error.h"
+
+#include <iprt/asm.h>
+/*
+ * Handle for Thread-Specific Data
+ */
+typedef struct {
+#ifdef WINDOWS
+	DWORD key;
+#else
+	pthread_key_t key;
+#endif
+	int initMagic;
+} CRtsd;
+
+
+extern DECLEXPORT(void) crInitTSD(CRtsd *tsd);
+extern DECLEXPORT(void) crInitTSDF(CRtsd *tsd, void (*destructor)(void *));
+extern DECLEXPORT(void) crFreeTSD(CRtsd *tsd);
+extern DECLEXPORT(void) crSetTSD(CRtsd *tsd, void *ptr);
+extern DECLEXPORT(void *) crGetTSD(CRtsd *tsd);
+extern DECLEXPORT(unsigned long) crThreadID(void);
+
+
+/* Mutex datatype */
+#ifdef WINDOWS
+typedef CRITICAL_SECTION CRmutex;
+#else
+typedef pthread_mutex_t CRmutex;
+#endif
+
+extern DECLEXPORT(void) crInitMutex(CRmutex *mutex);
+extern DECLEXPORT(void) crFreeMutex(CRmutex *mutex);
+extern DECLEXPORT(void) crLockMutex(CRmutex *mutex);
+extern DECLEXPORT(void) crUnlockMutex(CRmutex *mutex);
+
+
+/* Condition variable datatype */
+#ifdef WINDOWS
+typedef int CRcondition;
+#else
+typedef pthread_cond_t CRcondition;
+#endif
+
+extern DECLEXPORT(void) crInitCondition(CRcondition *cond);
+extern DECLEXPORT(void) crFreeCondition(CRcondition *cond);
+extern DECLEXPORT(void) crWaitCondition(CRcondition *cond, CRmutex *mutex);
+extern DECLEXPORT(void) crSignalCondition(CRcondition *cond);
+
+
+/* Barrier datatype */
+typedef struct {
+	unsigned int count;
+#ifdef WINDOWS
+	HANDLE hEvents[CR_MAX_CONTEXTS];
+#else
+	unsigned int waiting;
+	pthread_cond_t cond;
+	pthread_mutex_t mutex;
+#endif
+} CRbarrier;
+
+extern DECLEXPORT(void) crInitBarrier(CRbarrier *b, unsigned int count);
+extern DECLEXPORT(void) crFreeBarrier(CRbarrier *b);
+extern DECLEXPORT(void) crWaitBarrier(CRbarrier *b);
+
+
+/* Semaphores */
+#ifdef WINDOWS
+	typedef int CRsemaphore;
+#else
+	typedef sem_t CRsemaphore;
+#endif
+
+extern DECLEXPORT(void) crInitSemaphore(CRsemaphore *s, unsigned int count);
+extern DECLEXPORT(void) crWaitSemaphore(CRsemaphore *s);
+extern DECLEXPORT(void) crSignalSemaphore(CRsemaphore *s);
+
+#define VBoxTlsRefGetImpl(_tls) (crGetTSD((CRtsd*)(_tls)))
+#define VBoxTlsRefSetImpl(_tls, _val) (crSetTSD((CRtsd*)(_tls), (_val)))
+#define VBoxTlsRefAssertImpl CRASSERT
+#include <VBox/Graphics/VBoxVideo3D.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_THREADS_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_unpack.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_unpack.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_unpack.h	(revision 86648)
@@ -0,0 +1,216 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_UNPACK_H
+#define CR_UNPACK_H
+
+#include "cr_compiler.h"
+#include "cr_spu.h"
+#include "cr_protocol.h"
+#include "cr_mem.h"
+#include "cr_opcodes.h"
+#include "cr_glstate.h"
+
+#include <iprt/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Unpacker state.
+ */
+typedef struct CrUnpackerState
+{
+    /** Opcodes which are going to be unpacked. */
+    const uint8_t               *pbOpcodes;
+    /** NUmber of Opcodes to unpack. */
+    size_t                      cOpcodes;
+    /** Start of the data buffer to unpack. */
+    const uint8_t               *pbUnpackData;
+    /** Number of bytes remaining the inpack buffer. */
+    size_t                      cbUnpackDataLeft;
+    /** Return pointer. */
+    CRNetworkPointer            *pReturnPtr;
+    /** Writeback pointer. */
+    CRNetworkPointer            *pWritebackPtr;
+    /** Pointer to the dispatch table to use. */
+    SPUDispatchTable            *pDispatchTbl;
+    /** Status code from the unpacker (mostly returns VERR_BUFFER_OVERFLOW
+     * on error if one unpacker detected out of bounds buffer access). */
+    int                         rcUnpack;
+    /** Attached state tracker. */
+    PCRStateTracker             pStateTracker;
+} CrUnpackerState;
+/** Pointer to an unpacker state. */
+typedef CrUnpackerState *PCrUnpackerState;
+/** Pointer to a const unpacker state. */
+typedef const CrUnpackerState *PCCrUnpackerState;
+
+DECLEXPORT(void) crUnpack(PCrUnpackerState pState);
+
+typedef enum
+{
+    CR_UNPACK_BUFFER_TYPE_GENERIC = 0,
+    CR_UNPACK_BUFFER_TYPE_CMDBLOCK_BEGIN,
+    CR_UNPACK_BUFFER_TYPE_CMDBLOCK_FLUSH,
+    CR_UNPACK_BUFFER_TYPE_CMDBLOCK_END
+} CR_UNPACK_BUFFER_TYPE;
+
+DECLEXPORT(CR_UNPACK_BUFFER_TYPE) crUnpackGetBufferType(const void *opcodes, unsigned int num_opcodes);
+
+#if defined(LINUX) || defined(WINDOWS)
+#define CR_UNALIGNED_ACCESS_OKAY
+#else
+#undef CR_UNALIGNED_ACCESS_OKAY
+#endif
+DECLEXPORT(double) crReadUnalignedDouble( const void *buffer );
+
+/**
+ * Paranoid helper for debug builds to make sure the buffer size is validated correctly.
+ */
+DECLINLINE(const void *) crUnpackAccessChk(PCCrUnpackerState pState, size_t cbAccessVerified,
+                                     size_t offAccess, size_t cbType)
+{
+    AssertMsg(offAccess + cbType <= cbAccessVerified,
+             ("CHECK_BUFFER_SIZE_STATIC() has a wrong size given (verified %zu bytes vs tried access %zu)!\n",
+             cbAccessVerified, offAccess + cbType));
+    RT_NOREF(cbAccessVerified, cbType);
+    return pState->pbUnpackData + offAccess;
+}
+
+/**
+ * Does a one time check whether the buffer has sufficient data to access at least a_cbAccess
+ * bytes. Sets an error for the state and returns.
+ *
+ * @note Should only be used in the prologue of a method.
+ * @remark The introduction of int_cbAccessVerified makes sure CHECK_BUFFER_SIZE_STATIC() is there in each method for at least
+  *        some rudimentary sanity check (fails to compile otherwise).
+ */
+#define CHECK_BUFFER_SIZE_STATIC(a_pState, a_cbAccess) \
+    if (RT_UNLIKELY((a_pState)->cbUnpackDataLeft < (a_cbAccess))) \
+    { \
+        (a_pState)->rcUnpack = VERR_BUFFER_OVERFLOW; \
+        AssertFailed(); \
+        return; \
+    } \
+    size_t int_cbAccessVerified = (a_cbAccess); RT_NOREF(int_cbAccessVerified)
+
+#define CHECK_BUFFER_SIZE_STATIC_LAST(a_pState, a_offAccessLast, a_Type) CHECK_BUFFER_SIZE_STATIC(a_pState, (a_offAccessLast) + sizeof( a_Type ))
+
+#define CHECK_BUFFER_SIZE_STATIC_UPDATE(a_pState, a_cbAccess) \
+    do \
+    { \
+        if (RT_UNLIKELY((a_pState)->cbUnpackDataLeft < (size_t)(a_cbAccess))) \
+        { \
+            (a_pState)->rcUnpack = VERR_BUFFER_OVERFLOW; \
+            AssertFailed(); \
+            return; \
+        } \
+        int_cbAccessVerified = (a_cbAccess); \
+    } \
+    while (0)
+
+#define CHECK_BUFFER_SIZE_STATIC_UPDATE_LAST(a_pState, a_offAccessLast, a_Type) CHECK_BUFFER_SIZE_STATIC_UPDATE(a_pState, (a_offAccessLast) + sizeof( a_Type ))
+
+#define CHECK_ARRAY_SIZE_FROM_PTR_UPDATE_LAST(a_pState, a_pArrayStart, a_cElements, a_Type) \
+    CHECK_BUFFER_SIZE_STATIC_UPDATE(a_pState, ((const uint8_t *)a_pArrayStart - (a_pState)->pbUnpackData) + (a_cElements) * sizeof(a_Type))
+#define CHECK_ARRAY_SIZE_FROM_PTR_UPDATE_SZ_LAST(a_pState, a_pArrayStart, a_cElements, a_cbType) \
+    CHECK_BUFFER_SIZE_STATIC_UPDATE(a_pState, ((const uint8_t *)a_pArrayStart - (a_pState)->pbUnpackData) + (a_cElements) * (a_cbType))
+
+
+DECLINLINE(size_t) crUnpackAcccessChkStrUpdate(PCrUnpackerState pState, const char *psz, size_t *pcbVerified)
+{
+    size_t cchStr = 0;
+    size_t cbChkMax = pState->cbUnpackDataLeft - ((const uint8_t *)psz - pState->pbUnpackData);
+    void *pv = memchr((void *)psz, '\0', cbChkMax);
+    if (!pv)
+    {
+        pState->rcUnpack = VERR_BUFFER_OVERFLOW;
+        AssertFailed();
+        return ~(size_t)0;
+    }
+
+    cchStr = (uint8_t *)pv - pState->pbUnpackData + 1;
+    *pcbVerified = cchStr;
+
+    return cchStr;
+}
+
+#define CHECK_STRING_FROM_PTR_UPDATE_NO_RETURN(a_pState, a_pszStr) crUnpackAcccessChkStrUpdate((a_pState), (a_pszStr), &int_cbAccessVerified);
+
+#define CHECK_STRING_FROM_PTR_UPDATE_NO_SZ(a_pState, a_pszStr) \
+    do \
+    { \
+        size_t cchStr = crUnpackAcccessChkStrUpdate((a_pState), (a_pszStr), &int_cbAccessVerified); \
+        if (RT_UNLIKELY(cchStr == ~(size_t)0)) \
+            return; \
+    } \
+    while (0)
+
+/**
+ * Reads data at the given offset of the given type from the supplied data buffer.
+ */
+#define READ_DATA(a_pState, offset, type ) *(const type *)crUnpackAccessChk((a_pState), int_cbAccessVerified, (offset), sizeof( type ))
+
+#ifdef CR_UNALIGNED_ACCESS_OKAY
+#define READ_DOUBLE(a_pState, offset ) READ_DATA(a_pState, offset, GLdouble )
+#else
+#define READ_DOUBLE(a_pState, offset ) crReadUnalignedDouble(crUnpackAccessChk((a_pState), int_cbAccessVerified, (offset), sizeof( GLdouble ) ))
+#endif
+
+#define READ_NETWORK_POINTER(a_pState, offset ) (uint8_t *)crUnpackAccessChk((a_pState), int_cbAccessVerified, (offset), 0)
+#define DATA_POINTER(a_pState, offset, type )   ((type *) (crUnpackAccessChk((a_pState), int_cbAccessVerified, (offset), 0)) )
+
+#define DATA_POINTER_CHECK_SIZE(a_pState, a_cbAccess )   ((size_t)(a_cbAccess) <= (a_pState)->cbUnpackDataLeft)
+
+#define INCR_DATA_PTR(a_pState, delta ) \
+    do \
+    { \
+        size_t a_cbAdv = (delta); \
+        if (RT_UNLIKELY((a_pState)->cbUnpackDataLeft < a_cbAdv)) \
+        { \
+          (a_pState)->rcUnpack = VERR_BUFFER_OVERFLOW; \
+          AssertFailed(); \
+          return; \
+        } \
+        (a_pState)->pbUnpackData     += a_cbAdv; \
+        (a_pState)->cbUnpackDataLeft -= a_cbAdv; \
+    } while(0)
+
+#define INCR_DATA_PTR_NO_ARGS(a_pState) INCR_DATA_PTR(a_pState, 4 )
+
+#define INCR_VAR_PTR(a_pState) INCR_DATA_PTR(a_pState, *((int *)(a_pState)->pbUnpackData) )
+
+#define SET_RETURN_PTR(a_pState, offset ) \
+    do \
+    { \
+        CRDBGPTR_CHECKZ((a_pState)->pReturnPtr); \
+        if (offset + sizeof(*(a_pState)->pReturnPtr) > (a_pState)->cbUnpackDataLeft) \
+        { \
+             crError("%s: SET_RETURN_PTR(%u) offset out of bounds\n", __FUNCTION__, offset); \
+             return; \
+        } \
+        crMemcpy((a_pState)->pReturnPtr, crUnpackAccessChk((a_pState), int_cbAccessVerified, (offset), sizeof( *(a_pState)->pReturnPtr )), sizeof( *(a_pState)->pReturnPtr ) ); \
+    } while (0)
+
+#define SET_WRITEBACK_PTR(a_pState, offset ) \
+    do \
+    { \
+        CRDBGPTR_CHECKZ((a_pState)->pWritebackPtr); \
+        if (offset + sizeof(*(a_pState)->pWritebackPtr) > (a_pState)->cbUnpackDataLeft) \
+        { \
+             crError("%s: SET_WRITEBACK_PTR(%u) offset out of bounds\n", __FUNCTION__, offset); \
+             return; \
+        } \
+        crMemcpy((a_pState)->pWritebackPtr, crUnpackAccessChk((a_pState), int_cbAccessVerified, (offset), sizeof( *(a_pState)->pWritebackPtr )), sizeof( *(a_pState)->pWritebackPtr) ); \
+    } while (0);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_UNPACK_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_version.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_version.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_version.h	(revision 86648)
@@ -0,0 +1,192 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_VERSION_H
+#define CR_VERSION_H
+
+#define SHCROGL_SSM_VERSION_BEFORE_CTXUSAGE_BITS                    28
+/* version which might have context usage bits saved */
+#define SHCROGL_SSM_VERSION_WITH_SAVED_CTXUSAGE_BITS                SHCROGL_SSM_VERSION_BEFORE_CTXUSAGE_BITS
+#define SHCROGL_SSM_VERSION_BEFORE_FRONT_DRAW_TRACKING              29
+/* version that might have corrupted state data */
+#define SHCROGL_SSM_VERSION_WITH_CORUPTED_STATE                     30
+/* version with invalid glGetError state */
+#define SHCROGL_SSM_VERSION_WITH_INVALID_ERROR_STATE                30
+/* VBox 4.2.12 had a bug that incorrectly CRMuralInfo data
+ * in a different format without changing the state version,
+ * i.e. 30 version can have both "correct" and "incorrect" CRMuralInfo data */
+#define SHCROGL_SSM_VERSION_WITH_BUGGY_MURAL_INFO                   30
+/* the saved state has incorrect front and back buffer image data */
+#define SHCROGL_SSM_VERSION_WITH_BUGGY_FB_IMAGE_DATA                31
+#define SHCROGL_SSM_VERSION_WITH_STATE_BITS                         33
+#define SHCROGL_SSM_VERSION_WITH_WINDOW_CTX_USAGE                   33
+#define SHCROGL_SSM_VERSION_WITH_FIXED_STENCIL                      34
+#define SHCROGL_SSM_VERSION_WITH_SAVED_DEPTH_STENCIL_BUFFER         35
+/* some ogl drivers fail to Read/DrawPixels for DEPTH and STENCIL separately
+ * from DEPTH_STENCIL renderbuffer we used for offscreen rendering
+ * this is why we switched to glReadDrawPixels(GL_DEPTH_STENCIL) in one run */
+#define SHCROGL_SSM_VERSION_WITH_SINGLE_DEPTH_STENCIL               36
+#define SHCROGL_SSM_VERSION_WITH_PRESENT_STATE                      37
+/* older state did not have glPointParameter ( GL_POINT_SPRITE_COORD_ORIGIN ) implementation */
+#define SHCROGL_SSM_VERSION_WITH_SPRITE_COORD_ORIGIN                38
+/* dirty bits are not needed for now, remove */
+#define SHCROGL_SSM_VERSION_WITHOUT_DIRTY_BITS                      38
+/* dummy windows and contexts have 0 external IDs, so never get stored to the state */
+#define SHCROGL_SSM_VERSION_WITH_FIXED_DUMMYIDS                     39
+#define SHCROGL_SSM_VERSION_WITH_SCREEN_INFO                        40
+#define SHCROGL_SSM_VERSION_WITH_ALLOCATED_KEYS                     41
+#define SHCROGL_SSM_VERSION_WITH_FB_INFO                            42
+#define SHCROGL_SSM_VERSION_WITH_BUGGY_KEYS                         42
+#define SHCROGL_SSM_VERSION_CRCMD                                   44
+#define SHCROGL_SSM_VERSION_WITH_SCREEN_MAP                         45
+#define SHCROGL_SSM_VERSION_WITH_SCREEN_MAP_REORDERED               46
+#define SHCROGL_SSM_VERSION_WITH_PEND_CMD_INFO                      47
+#define SHCROGL_SSM_VERSION_WITH_SEPARATE_DEPTH_STENCIL_BUFFERS     48
+#define SHCROGL_SSM_VERSION_WITH_DISPLAY_LISTS                      49
+#define SHCROGL_SSM_VERSION                                         49
+
+/* These define the Chromium release number.
+ * Alpha Release = 0.1.0, Beta Release = 0.2.0
+ */
+#define CR_MAJOR_VERSION 1
+#define CR_MINOR_VERSION 9
+#define CR_PATCH_VERSION 0
+
+#define CR_VERSION_STRING "1.9"   /* Chromium version, not OpenGL version */
+
+
+/* These define the OpenGL version that Chromium supports.
+ * This lets users easily recompile Chromium with/without OpenGL 1.x support.
+ * We use OpenGL's GL_VERSION_1_x convention.
+ */
+#define CR_OPENGL_VERSION_1_0 1
+#define CR_OPENGL_VERSION_1_1 1
+#define CR_OPENGL_VERSION_1_2 1
+#define CR_OPENGL_VERSION_1_2_1 1
+#define CR_OPENGL_VERSION_1_3 1
+#define CR_OPENGL_VERSION_1_4 1
+#define CR_OPENGL_VERSION_1_5 1
+#define CR_OPENGL_VERSION_2_0 1
+#define CR_OPENGL_VERSION_2_1 1
+
+/* Version (string) of OpenGL functionality supported by Chromium */
+#ifdef CR_OPENGL_VERSION_2_1
+# define CR_OPENGL_VERSION_STRING "2.1"
+# define CR_OPENGL_VERSION_MAJOR  2
+# define CR_OPENGL_VERSION_MINOR  1
+#elif defined(CR_OPENGL_VERSION_2_0)
+# define CR_OPENGL_VERSION_STRING "2.0"
+# define CR_OPENGL_VERSION_MAJOR  2
+# define CR_OPENGL_VERSION_MINOR  0
+#else
+# define CR_OPENGL_VERSION_STRING "1.5"
+# define CR_OPENGL_VERSION_MAJOR  1
+# define CR_OPENGL_VERSION_MINOR  5
+#endif
+
+
+/* These define the OpenGL extensions that Chromium supports.
+ * Users can enable/disable support for particular OpenGL extensions here.
+ * Again, use OpenGL's convention.
+ * WARNING: if you add new extensions here, also update this file:
+ * state_tracker/state_limits.c
+ */
+
+/*#define CR_ARB_imaging 1    not yet */
+#define CR_ARB_depth_texture 1
+#define CR_ARB_fragment_program 1
+#define CR_ARB_multitexture 1
+#define CR_ARB_multisample 1
+#define CR_ARB_occlusion_query 1
+#define CR_ARB_point_parameters 1
+#define CR_ARB_point_sprite 1
+#define CR_ARB_shadow 1
+#define CR_ARB_shadow_ambient 1
+#define CR_ARB_texture_border_clamp 1
+#define CR_ARB_texture_compression 1
+#define CR_ARB_texture_cube_map 1
+#define CR_ARB_texture_env_add 1
+#define CR_ARB_texture_env_combine 1
+#define CR_ARB_texture_env_crossbar 1
+#define CR_ARB_texture_env_dot3 1
+#define CR_ARB_texture_mirrored_repeat 1
+#define CR_ATI_texture_mirror_once 1
+#define CR_ARB_texture_non_power_of_two 1
+#define CR_ARB_transpose_matrix 1
+#define CR_ARB_vertex_buffer_object 1
+#define CR_ARB_vertex_program 1
+#define CR_ARB_window_pos 1
+
+#define CR_EXT_blend_color 1
+#define CR_EXT_blend_equation 1
+#define CR_EXT_blend_minmax 1
+#define CR_EXT_blend_logic_op 1
+#define CR_EXT_blend_subtract 1
+#define CR_EXT_blend_func_separate 1
+#define CR_EXT_clip_volume_hint 1
+#define CR_EXT_fog_coord 1
+#define CR_EXT_multi_draw_arrays 1
+#define CR_EXT_shadow_funcs 1
+#define CR_EXT_secondary_color 1
+#ifndef CR_OPENGL_VERSION_1_2
+#define CR_EXT_separate_specular_color 1
+#endif
+#define CR_EXT_stencil_wrap 1
+#define CR_EXT_texture_cube_map 1
+#define CR_EXT_texture_edge_clamp 1
+#define CR_EXT_texture_env_add 1
+#define CR_EXT_texture_filter_anisotropic 1
+#define CR_EXT_texture_lod_bias 1
+#define CR_EXT_texture_object 1
+#define CR_EXT_texture3D 1
+
+#define CR_IBM_rasterpos_clip 1
+
+#define CR_NV_fog_distance 1
+#define CR_NV_register_combiners 1
+#define CR_NV_register_combiners2 1
+#define CR_NV_texgen_reflection 1
+#define CR_NV_texture_rectangle  1
+#define CR_NV_vertex_program 1
+#define CR_NV_vertex_program1_1 1
+#define CR_NV_vertex_program2 1
+#define CR_NV_vertex_program2_option 1
+#define CR_NV_vertex_program3 1
+#define CR_NV_fragment_program 1
+#define CR_NV_fragment_program_option 1
+#define CR_NV_fragment_program2 1
+
+#define CR_SGIS_texture_border_clamp 1
+#define CR_SGIS_texture_edge_clamp 1
+#define CR_SGIS_generate_mipmap 1
+
+#define CR_EXT_texture_from_pixmap 1
+#define CR_EXT_draw_range_elements 1
+#define CR_EXT_texture_compression_s3tc 1
+
+#define CR_ARB_shader_objects 1
+#define CR_ARB_vertex_shader 1
+#define CR_ARB_fragment_shader 1
+#define CR_ARB_shading_language_100 1
+
+#define CR_EXT_framebuffer_object 1
+#define CR_EXT_compiled_vertex_array 1
+
+#define CR_ARB_pixel_buffer_object 1
+#define CR_EXT_texture_sRGB 1
+
+#define CR_EXT_framebuffer_blit 1
+#define CR_EXT_blend_equation_separate 1
+#define CR_EXT_stencil_two_side 1
+
+#define CR_GREMEDY_string_marker 1
+
+#define CR_ARB_texture_float 1
+#define CR_ARB_draw_buffers 1
+
+#define CR_ARB_shader_texture_lod 1
+
+#endif /* CR_VERSION_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_vreg.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_vreg.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_vreg.h	(revision 86648)
@@ -0,0 +1,411 @@
+/* $Id$ */
+/** @file
+ * Visible Regions processing API
+ */
+
+/*
+ * Copyright (C) 2012-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___cr_vreg_h_
+#define ___cr_vreg_h_
+
+#include <iprt/list.h>
+#include <iprt/types.h>
+#include <iprt/mem.h>
+#include <iprt/string.h>
+#include <iprt/assert.h>
+#include <iprt/critsect.h>
+#include <iprt/asm.h>
+
+#ifndef IN_RING0
+# define VBOXVREGDECL(_type) DECLEXPORT(_type)
+#else
+/** @todo r=bird: Using RTDECL is just SOO wrong!   */
+# define VBOXVREGDECL(_type) RTDECL(_type)
+#endif
+
+
+
+RT_C_DECLS_BEGIN
+
+typedef struct VBOXVR_LIST
+{
+    RTLISTANCHOR ListHead;
+    uint32_t cEntries;
+} VBOXVR_LIST;
+typedef VBOXVR_LIST *PVBOXVR_LIST;
+typedef VBOXVR_LIST const *PCVBOXVR_LIST;
+
+DECLINLINE(int) VBoxRectCmp(PCRTRECT pRect1, PCRTRECT pRect2)
+{
+    return memcmp(pRect1, pRect2, sizeof(*pRect1));
+}
+
+#ifndef IN_RING0
+# define CR_FLOAT_RCAST(_t, _v) ((_t)((float)(_v) + 0.5))
+
+DECLINLINE(void) VBoxRectScale(PRTRECT pRect, float xScale, float yScale)
+{
+    pRect->xLeft   = CR_FLOAT_RCAST(int32_t, pRect->xLeft   * xScale);
+    pRect->yTop    = CR_FLOAT_RCAST(int32_t, pRect->yTop    * yScale);
+    pRect->xRight  = CR_FLOAT_RCAST(int32_t, pRect->xRight  * xScale);
+    pRect->yBottom = CR_FLOAT_RCAST(int32_t, pRect->yBottom * yScale);
+}
+
+DECLINLINE(void) VBoxRectScaled(PCRTRECT pRect, float xScale, float yScale, PRTRECT pResult)
+{
+    *pResult = *pRect;
+    VBoxRectScale(pResult, xScale, yScale);
+}
+
+DECLINLINE(void) VBoxRectUnscale(PRTRECT pRect, float xScale, float yScale)
+{
+    pRect->xLeft   = CR_FLOAT_RCAST(int32_t, pRect->xLeft   / xScale);
+    pRect->yTop    = CR_FLOAT_RCAST(int32_t, pRect->yTop    / yScale);
+    pRect->xRight  = CR_FLOAT_RCAST(int32_t, pRect->xRight  / xScale);
+    pRect->yBottom = CR_FLOAT_RCAST(int32_t, pRect->yBottom / yScale);
+}
+
+DECLINLINE(void) VBoxRectUnscaled(PCRTRECT pRect, float xScale, float yScale, PRTRECT pResult)
+{
+    *pResult = *pRect;
+    VBoxRectUnscale(pResult, xScale, yScale);
+}
+
+#endif /* IN_RING0 */
+
+DECLINLINE(void) VBoxRectIntersect(PRTRECT pRect1, PCRTRECT pRect2)
+{
+    Assert(pRect1);
+    Assert(pRect2);
+    pRect1->xLeft   = RT_MAX(pRect1->xLeft,   pRect2->xLeft);
+    pRect1->yTop    = RT_MAX(pRect1->yTop,    pRect2->yTop);
+    pRect1->xRight  = RT_MIN(pRect1->xRight,  pRect2->xRight);
+    pRect1->yBottom = RT_MIN(pRect1->yBottom, pRect2->yBottom);
+    /* ensure the rect is valid */
+    pRect1->xRight  = RT_MAX(pRect1->xRight,  pRect1->xLeft);
+    pRect1->yBottom = RT_MAX(pRect1->yBottom, pRect1->yTop);
+}
+
+DECLINLINE(void) VBoxRectIntersected(PCRTRECT pRect1, PCRTRECT pRect2, PRTRECT pResult)
+{
+    *pResult = *pRect1;
+    VBoxRectIntersect(pResult, pRect2);
+}
+
+
+DECLINLINE(void) VBoxRectTranslate(PRTRECT pRect, int32_t x, int32_t y)
+{
+    pRect->xLeft   += x;
+    pRect->yTop    += y;
+    pRect->xRight  += x;
+    pRect->yBottom += y;
+}
+
+DECLINLINE(void) VBoxRectTranslated(PCRTRECT pRect, int32_t x, int32_t y, PRTRECT pResult)
+{
+    *pResult = *pRect;
+    VBoxRectTranslate(pResult, x, y);
+}
+
+DECLINLINE(void) VBoxRectInvertY(PRTRECT pRect)
+{
+    int32_t y = pRect->yTop;
+    pRect->yTop = pRect->yBottom;
+    pRect->yBottom = y;
+}
+
+DECLINLINE(void) VBoxRectInvertedY(PCRTRECT pRect, PRTRECT pResult)
+{
+    *pResult = *pRect;
+    VBoxRectInvertY(pResult);
+}
+
+DECLINLINE(void) VBoxRectMove(PRTRECT pRect, int32_t x, int32_t y)
+{
+    int32_t cx = pRect->xRight  - pRect->xLeft;
+    int32_t cy = pRect->yBottom - pRect->yTop;
+    pRect->xLeft   = x;
+    pRect->yTop    = y;
+    pRect->xRight  = cx + x;
+    pRect->yBottom = cy + y;
+}
+
+DECLINLINE(void) VBoxRectMoved(PCRTRECT pRect, int32_t x, int32_t y, PRTRECT pResult)
+{
+    *pResult = *pRect;
+    VBoxRectMove(pResult, x, y);
+}
+
+DECLINLINE(bool) VBoxRectCovers(PCRTRECT pRect, PCRTRECT pCovered)
+{
+    AssertPtr(pRect);
+    AssertPtr(pCovered);
+    if (pRect->xLeft > pCovered->xLeft)
+        return false;
+    if (pRect->yTop > pCovered->yTop)
+        return false;
+    if (pRect->xRight < pCovered->xRight)
+        return false;
+    if (pRect->yBottom < pCovered->yBottom)
+        return false;
+    return true;
+}
+
+DECLINLINE(bool) VBoxRectIsZero(PCRTRECT pRect)
+{
+    return pRect->xLeft == pRect->xRight || pRect->yTop == pRect->yBottom;
+}
+
+DECLINLINE(bool) VBoxRectIsIntersect(PCRTRECT pRect1, PCRTRECT pRect2)
+{
+    return !(   (pRect1->xLeft < pRect2->xLeft && pRect1->xRight  <= pRect2->xLeft)
+             || (pRect2->xLeft < pRect1->xLeft && pRect2->xRight  <= pRect1->xLeft)
+             || (pRect1->yTop  < pRect2->yTop  && pRect1->yBottom <= pRect2->yTop)
+             || (pRect2->yTop  < pRect1->yTop  && pRect2->yBottom <= pRect1->yTop) );
+}
+
+DECLINLINE(uint32_t) VBoxVrListRectsCount(PCVBOXVR_LIST pList)
+{
+    return pList->cEntries;
+}
+
+DECLINLINE(bool) VBoxVrListIsEmpty(PCVBOXVR_LIST pList)
+{
+    return !VBoxVrListRectsCount(pList);
+}
+
+DECLINLINE(void) VBoxVrListInit(PVBOXVR_LIST pList)
+{
+    RTListInit(&pList->ListHead);
+    pList->cEntries = 0;
+}
+
+VBOXVREGDECL(void) VBoxVrListClear(PVBOXVR_LIST pList);
+
+/* moves list data to pDstList and empties the pList */
+VBOXVREGDECL(void) VBoxVrListMoveTo(PVBOXVR_LIST pList, PVBOXVR_LIST pDstList);
+
+VBOXVREGDECL(void) VBoxVrListTranslate(PVBOXVR_LIST pList, int32_t x, int32_t y);
+
+VBOXVREGDECL(int) VBoxVrListCmp(PCVBOXVR_LIST pList1, PCVBOXVR_LIST pList2);
+
+VBOXVREGDECL(int) VBoxVrListRectsSet(PVBOXVR_LIST pList, uint32_t cRects, PCRTRECT paRects, bool *pfChanged);
+VBOXVREGDECL(int) VBoxVrListRectsAdd(PVBOXVR_LIST pList, uint32_t cRects, PCRTRECT paRects, bool *pfChanged);
+VBOXVREGDECL(int) VBoxVrListRectsSubst(PVBOXVR_LIST pList, uint32_t cRects, PCRTRECT paRects, bool *pfChanged);
+VBOXVREGDECL(int) VBoxVrListRectsGet(PVBOXVR_LIST pList, uint32_t cRects, PRTRECT paRects);
+
+VBOXVREGDECL(int) VBoxVrListClone(PCVBOXVR_LIST pList, VBOXVR_LIST *pDstList);
+
+/* NOTE: with the current implementation the VBoxVrListIntersect is faster than VBoxVrListRectsIntersect,
+ * i.e. VBoxVrListRectsIntersect is actually a convenience function that create a temporary list and calls
+ * VBoxVrListIntersect internally. */
+VBOXVREGDECL(int) VBoxVrListRectsIntersect(PVBOXVR_LIST pList, uint32_t cRects, PCRTRECT paRects, bool *pfChanged);
+VBOXVREGDECL(int) VBoxVrListIntersect(PVBOXVR_LIST pList, PCVBOXVR_LIST pList2, bool *pfChanged);
+
+VBOXVREGDECL(int) VBoxVrInit(void);
+VBOXVREGDECL(void) VBoxVrTerm(void);
+
+typedef struct VBOXVR_LIST_ITERATOR
+{
+    PVBOXVR_LIST pList;
+    PRTLISTNODE pNextEntry;
+} VBOXVR_LIST_ITERATOR;
+typedef VBOXVR_LIST_ITERATOR *PVBOXVR_LIST_ITERATOR;
+typedef VBOXVR_LIST_ITERATOR const *PCVBOXVR_LIST_ITERATOR;
+
+DECLINLINE(void) VBoxVrListIterInit(PVBOXVR_LIST pList, PVBOXVR_LIST_ITERATOR pIter)
+{
+    pIter->pList = pList;
+    pIter->pNextEntry = pList->ListHead.pNext;
+}
+
+typedef struct VBOXVR_REG
+{
+    RTLISTNODE ListEntry;
+    RTRECT Rect;
+} VBOXVR_REG;
+typedef VBOXVR_REG *PVBOXVR_REG;
+typedef VBOXVR_REG const *PCVBOXVR_REG;
+
+#define PVBOXVR_REG_FROM_ENTRY(_pEntry)     RT_FROM_MEMBER(_pEntry, VBOXVR_REG, ListEntry)
+
+DECLINLINE(PCRTRECT) VBoxVrListIterNext(PVBOXVR_LIST_ITERATOR pIter)
+{
+    PRTLISTNODE pNextEntry = pIter->pNextEntry;
+    if (pNextEntry != &pIter->pList->ListHead)
+    {
+        PCRTRECT pRect = &PVBOXVR_REG_FROM_ENTRY(pNextEntry)->Rect;
+        pIter->pNextEntry = pNextEntry->pNext;
+        return pRect;
+    }
+    return NULL;
+}
+
+typedef struct VBOXVR_COMPOSITOR_ENTRY
+{
+    RTLISTNODE Node;
+    VBOXVR_LIST Vr;
+    uint32_t cRefs;
+} VBOXVR_COMPOSITOR_ENTRY;
+typedef VBOXVR_COMPOSITOR_ENTRY *PVBOXVR_COMPOSITOR_ENTRY;
+typedef VBOXVR_COMPOSITOR_ENTRY const *PCVBOXVR_COMPOSITOR_ENTRY;
+
+struct VBOXVR_COMPOSITOR;
+
+typedef DECLCALLBACK(void) FNVBOXVRCOMPOSITOR_ENTRY_RELEASED(const struct VBOXVR_COMPOSITOR *pCompositor,
+                                                             PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                             PVBOXVR_COMPOSITOR_ENTRY pReplacingEntry);
+typedef FNVBOXVRCOMPOSITOR_ENTRY_RELEASED *PFNVBOXVRCOMPOSITOR_ENTRY_RELEASED;
+
+typedef struct VBOXVR_COMPOSITOR
+{
+    RTLISTANCHOR List;
+    PFNVBOXVRCOMPOSITOR_ENTRY_RELEASED pfnEntryReleased;
+} VBOXVR_COMPOSITOR;
+typedef VBOXVR_COMPOSITOR *PVBOXVR_COMPOSITOR;
+typedef VBOXVR_COMPOSITOR const *PCVBOXVR_COMPOSITOR;
+
+typedef DECLCALLBACK(bool) FNVBOXVRCOMPOSITOR_VISITOR(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                      void *pvVisitor);
+typedef FNVBOXVRCOMPOSITOR_VISITOR *PFNVBOXVRCOMPOSITOR_VISITOR;
+
+VBOXVREGDECL(void) VBoxVrCompositorInit(PVBOXVR_COMPOSITOR pCompositor, PFNVBOXVRCOMPOSITOR_ENTRY_RELEASED pfnEntryReleased);
+VBOXVREGDECL(void) VBoxVrCompositorClear(PVBOXVR_COMPOSITOR pCompositor);
+VBOXVREGDECL(void) VBoxVrCompositorRegionsClear(PVBOXVR_COMPOSITOR pCompositor, bool *pfChanged);
+VBOXVREGDECL(void) VBoxVrCompositorEntryInit(PVBOXVR_COMPOSITOR_ENTRY pEntry);
+
+DECLINLINE(bool) VBoxVrCompositorEntryIsInList(PCVBOXVR_COMPOSITOR_ENTRY pEntry)
+{
+    return !VBoxVrListIsEmpty(&pEntry->Vr);
+}
+
+#define CRBLT_F_LINEAR                  0x00000001
+#define CRBLT_F_INVERT_SRC_YCOORDS      0x00000002
+#define CRBLT_F_INVERT_DST_YCOORDS      0x00000004
+#define CRBLT_F_INVERT_YCOORDS          (CRBLT_F_INVERT_SRC_YCOORDS | CRBLT_F_INVERT_DST_YCOORDS)
+/* the blit operation with discard the source alpha channel values and set the destination alpha values to 1.0 */
+#define CRBLT_F_NOALPHA                 0x00000010
+
+#define CRBLT_FTYPE_XOR                 CRBLT_F_INVERT_YCOORDS
+#define CRBLT_FTYPE_OR                  (CRBLT_F_LINEAR | CRBLT_F_NOALPHA)
+#define CRBLT_FOP_COMBINE(_f1, _f2)     ((((_f1) ^ (_f2)) & CRBLT_FTYPE_XOR) | (((_f1) | (_f2)) & CRBLT_FTYPE_OR))
+
+#define CRBLT_FLAGS_FROM_FILTER(_f)     ( ((_f) & GL_LINEAR) ? CRBLT_F_LINEAR : 0)
+#define CRBLT_FILTER_FROM_FLAGS(_f)     (((_f) & CRBLT_F_LINEAR) ? GL_LINEAR : GL_NEAREST)
+
+/* compositor regions changed */
+#define VBOXVR_COMPOSITOR_CF_REGIONS_CHANGED                           0x00000001
+/* other entries changed along while doing current entry modification
+ * always comes with VBOXVR_COMPOSITOR_CF_ENTRY_REGIONS_CHANGED */
+#define VBOXVR_COMPOSITOR_CF_OTHER_ENTRIES_REGIONS_CHANGED             0x00000002
+/* only current entry regions changed
+ * can come wither with VBOXVR_COMPOSITOR_CF_REGIONS_CHANGED or with VBOXVR_COMPOSITOR_CF_ENTRY_REPLACED */
+#define VBOXVR_COMPOSITOR_CF_ENTRY_REGIONS_CHANGED                     0x00000004
+/* the given entry has replaced some other entry, while overal regions did NOT change.
+ * always comes with VBOXVR_COMPOSITOR_CF_ENTRY_REGIONS_CHANGED */
+#define VBOXVR_COMPOSITOR_CF_ENTRY_REPLACED                            0x00000008
+
+
+VBOXVREGDECL(bool) VBoxVrCompositorEntryRemove(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry);
+VBOXVREGDECL(bool) VBoxVrCompositorEntryReplace(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                PVBOXVR_COMPOSITOR_ENTRY pNewEntry);
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsAdd(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                  uint32_t cRegions, PCRTRECT paRegions,
+                                                  PVBOXVR_COMPOSITOR_ENTRY *ppReplacedEntry, uint32_t *pfChangeFlags);
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsSubst(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                    uint32_t cRegions, PCRTRECT paRegions, bool *pfChanged);
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsSet(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                  uint32_t cRegions, PCRTRECT paRegions, bool *pfChanged);
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsIntersect(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                        uint32_t cRegions, PCRTRECT paRegions, bool *pfChanged);
+VBOXVREGDECL(int) VBoxVrCompositorEntryListIntersect(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                     PCVBOXVR_LIST pList2, bool *pfChanged);
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsIntersectAll(PVBOXVR_COMPOSITOR pCompositor, uint32_t cRegions, PCRTRECT paRegions,
+                                                           bool *pfChanged);
+VBOXVREGDECL(int) VBoxVrCompositorEntryListIntersectAll(PVBOXVR_COMPOSITOR pCompositor, PCVBOXVR_LIST pList2, bool *pfChanged);
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsTranslate(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                        int32_t x, int32_t y, bool *pfChanged);
+VBOXVREGDECL(void) VBoxVrCompositorVisit(PVBOXVR_COMPOSITOR pCompositor, PFNVBOXVRCOMPOSITOR_VISITOR pfnVisitor, void *pvVisitor);
+
+DECLINLINE(bool) VBoxVrCompositorIsEmpty(PCVBOXVR_COMPOSITOR pCompositor)
+{
+    return RTListIsEmpty(&pCompositor->List);
+}
+
+typedef struct VBOXVR_COMPOSITOR_ITERATOR
+{
+    PVBOXVR_COMPOSITOR pCompositor;
+    PRTLISTNODE pNextEntry;
+} VBOXVR_COMPOSITOR_ITERATOR;
+typedef VBOXVR_COMPOSITOR_ITERATOR *PVBOXVR_COMPOSITOR_ITERATOR;
+
+typedef struct VBOXVR_COMPOSITOR_CONST_ITERATOR
+{
+    PCVBOXVR_COMPOSITOR pCompositor;
+    PCRTLISTNODE pNextEntry;
+} VBOXVR_COMPOSITOR_CONST_ITERATOR;
+typedef VBOXVR_COMPOSITOR_CONST_ITERATOR *PVBOXVR_COMPOSITOR_CONST_ITERATOR;
+
+DECLINLINE(void) VBoxVrCompositorIterInit(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ITERATOR pIter)
+{
+    pIter->pCompositor = pCompositor;
+    pIter->pNextEntry = pCompositor->List.pNext;
+}
+
+DECLINLINE(void) VBoxVrCompositorConstIterInit(PCVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_CONST_ITERATOR pIter)
+{
+    pIter->pCompositor = pCompositor;
+    pIter->pNextEntry = pCompositor->List.pNext;
+}
+
+#define VBOXVR_COMPOSITOR_ENTRY_FROM_NODE(_p)       RT_FROM_MEMBER(_p, VBOXVR_COMPOSITOR_ENTRY, Node)
+#define VBOXVR_COMPOSITOR_CONST_ENTRY_FROM_NODE(_p) RT_FROM_MEMBER(_p, const VBOXVR_COMPOSITOR_ENTRY, Node)
+
+DECLINLINE(PVBOXVR_COMPOSITOR_ENTRY) VBoxVrCompositorIterNext(PVBOXVR_COMPOSITOR_ITERATOR pIter)
+{
+    PRTLISTNODE pNextEntry = pIter->pNextEntry;
+    if (pNextEntry != &pIter->pCompositor->List)
+    {
+        PVBOXVR_COMPOSITOR_ENTRY pEntry = VBOXVR_COMPOSITOR_ENTRY_FROM_NODE(pNextEntry);
+        pIter->pNextEntry = pNextEntry->pNext;
+        return pEntry;
+    }
+    return NULL;
+}
+
+DECLINLINE(PCVBOXVR_COMPOSITOR_ENTRY) VBoxVrCompositorConstIterNext(PVBOXVR_COMPOSITOR_CONST_ITERATOR pIter)
+{
+    PCRTLISTNODE pNextEntry = pIter->pNextEntry;
+    if (pNextEntry != &pIter->pCompositor->List)
+    {
+        PCVBOXVR_COMPOSITOR_ENTRY pEntry = VBOXVR_COMPOSITOR_CONST_ENTRY_FROM_NODE(pNextEntry);
+        pIter->pNextEntry = pNextEntry->pNext;
+        return pEntry;
+    }
+    return NULL;
+}
+
+typedef struct VBOXVR_TEXTURE
+{
+    int32_t  width;
+    int32_t  height;
+    uint32_t target;
+    uint32_t hwid;
+} VBOXVR_TEXTURE;
+typedef VBOXVR_TEXTURE *PVBOXVR_TEXTURE;
+typedef VBOXVR_TEXTURE const *PCVBOXVR_TEXTURE;
+
+RT_C_DECLS_END
+
+#endif
+
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_attrib.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_attrib.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_attrib.h	(revision 86648)
@@ -0,0 +1,405 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_ATTRIB_H 
+#define CR_STATE_ATTRIB_H 
+
+#include "state/cr_limits.h"
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+} CRAttribBits;
+
+typedef struct {
+	GLcolorf accumClearValue;
+} CRAccumBufferStack;
+
+typedef struct {
+	GLboolean	blend;
+	GLboolean	alphaTest;
+	GLboolean	logicOp;
+	GLboolean	indexLogicOp;
+	GLboolean	dither;
+
+	GLenum		alphaTestFunc;
+	GLfloat		alphaTestRef;
+	GLenum		blendSrcRGB;
+	GLenum		blendDstRGB;
+	GLenum		blendSrcA;
+	GLenum		blendDstA;
+	GLcolorf	blendColor;	
+	GLenum    blendEquation;
+	GLenum		logicOpMode;
+	GLenum		drawBuffer;
+	GLint     indexWriteMask;
+	GLcolorb	colorWriteMask;
+	GLcolorf	colorClearValue;
+	GLfloat 	indexClearValue;
+} CRColorBufferStack;
+
+typedef struct {
+	GLboolean    rasterValid;
+	GLfloat	     attrib[CR_MAX_VERTEX_ATTRIBS][4];
+	GLfloat      rasterAttrib[CR_MAX_VERTEX_ATTRIBS][4];
+	GLboolean    edgeFlag;
+	GLfloat      colorIndex;
+} CRCurrentStack;
+
+typedef struct {
+	GLboolean	depthTest;
+	GLboolean depthMask;
+	GLenum		depthFunc;
+	GLdefault	depthClearValue;
+} CRDepthBufferStack;
+
+typedef struct {
+	GLboolean alphaTest;
+	GLboolean autoNormal;
+	GLboolean blend;
+	GLboolean *clip;
+	GLboolean colorMaterial;
+	GLboolean cullFace;
+	GLboolean depthTest;
+	GLboolean dither;
+	GLboolean fog;
+	GLboolean *light;
+	GLboolean lighting;
+	GLboolean lineSmooth;
+	GLboolean lineStipple;
+	GLboolean logicOp;
+	GLboolean indexLogicOp;
+	GLboolean map1[GLEVAL_TOT];
+	GLboolean map2[GLEVAL_TOT];
+	GLboolean normalize;
+	GLboolean pointSmooth;
+#ifdef CR_ARB_point_sprite
+	GLboolean pointSprite;
+	GLboolean coordReplacement[CR_MAX_TEXTURE_UNITS];
+#endif
+	GLboolean polygonOffsetLine;
+	GLboolean polygonOffsetFill;
+	GLboolean polygonOffsetPoint;
+	GLboolean polygonSmooth;
+	GLboolean polygonStipple;
+#ifdef CR_OPENGL_VERSION_1_2
+	GLboolean rescaleNormals;
+#endif
+	GLboolean scissorTest;
+	GLboolean stencilTest;
+	GLboolean texture1D[CR_MAX_TEXTURE_UNITS];
+	GLboolean texture2D[CR_MAX_TEXTURE_UNITS];
+	GLboolean texture3D[CR_MAX_TEXTURE_UNITS];
+#ifdef CR_ARB_texture_cube_map
+	GLboolean textureCubeMap[CR_MAX_TEXTURE_UNITS];
+#endif
+#ifdef CR_NV_texture_rectangle
+	GLboolean textureRect[CR_MAX_TEXTURE_UNITS];
+#endif
+	GLboolean textureGenS[CR_MAX_TEXTURE_UNITS];
+	GLboolean textureGenT[CR_MAX_TEXTURE_UNITS];
+	GLboolean textureGenR[CR_MAX_TEXTURE_UNITS];
+	GLboolean textureGenQ[CR_MAX_TEXTURE_UNITS];
+} CREnableStack;
+
+typedef struct {
+	GLboolean enable1D[GLEVAL_TOT];
+	GLboolean enable2D[GLEVAL_TOT];
+	GLboolean autoNormal;
+	CREvaluator1D   eval1D[GLEVAL_TOT];
+	CREvaluator2D   eval2D[GLEVAL_TOT];
+	GLint     un1D;
+	GLfloat  u11D, u21D;
+	GLint     un2D;
+	GLint     vn2D;
+	GLfloat  u12D, u22D;
+	GLfloat  v12D, v22D;
+} CREvalStack;
+
+typedef struct {
+	GLboolean	lighting;
+	GLboolean	colorMaterial;
+	GLenum		shadeModel;
+	GLenum		colorMaterialMode;
+	GLenum		colorMaterialFace;
+	GLcolorf	ambient[2];
+	GLcolorf	diffuse[2];
+	GLcolorf	specular[2];
+	GLcolorf	emission[2];
+	GLfloat		shininess[2];
+	GLint		indexes[2][3];
+	GLcolorf	lightModelAmbient;
+	GLboolean	lightModelLocalViewer;
+	GLboolean	lightModelTwoSide;
+#if defined(CR_EXT_separate_specular_color) || defined(CR_OPENGL_VERSION_1_2)
+	GLenum          lightModelColorControlEXT;
+#endif
+	CRLight		*light;
+} CRLightingStack;
+
+typedef struct {
+	GLcolorf  color;
+	GLint     index;
+	GLfloat   density;
+	GLfloat   start;
+	GLfloat   end;
+	GLint     mode;
+	GLboolean enable;
+} CRFogStack;
+
+typedef struct {
+	GLenum perspectiveCorrection;
+	GLenum pointSmooth;
+	GLenum lineSmooth;
+	GLenum polygonSmooth;
+	GLenum fog;
+#ifdef CR_EXT_clip_volume_hint
+	GLenum clipVolumeClipping;
+#endif
+#ifdef CR_ARB_texture_compression
+	GLenum textureCompression;
+#endif
+#ifdef CR_SGIS_generate_mipmap
+	GLenum generateMipmap;
+#endif
+} CRHintStack;
+
+typedef struct {
+	GLboolean	lineSmooth;
+	GLboolean	lineStipple;
+	GLfloat		width;
+	GLushort	pattern;
+	GLint		repeat;
+} CRLineStack;
+
+typedef struct {
+	GLuint base;
+} CRListStack;
+
+typedef struct {
+	GLboolean   mapColor;
+	GLboolean   mapStencil;
+	GLint		    indexShift;
+	GLint		    indexOffset;
+	GLcolorf	  scale;
+	GLfloat		  depthScale;
+	GLcolorf	  bias;
+	GLfloat		  depthBias;
+	GLfloat		  xZoom;
+	GLfloat		  yZoom;
+	GLenum      readBuffer;
+} CRPixelModeStack;
+
+typedef struct {
+	GLboolean pointSmooth;
+	GLfloat pointSize;
+#if CR_ARB_point_sprite
+	GLboolean pointSprite;
+	GLboolean coordReplacement[CR_MAX_TEXTURE_UNITS];
+#endif
+} CRPointStack;
+
+typedef struct {
+	GLboolean	polygonSmooth;
+	GLboolean polygonOffsetFill;
+	GLboolean polygonOffsetLine;
+	GLboolean polygonOffsetPoint;
+	GLboolean	polygonStipple;
+	GLboolean cullFace;
+	GLfloat		offsetFactor;
+	GLfloat		offsetUnits;
+	GLenum		cullFaceMode;
+	GLenum		frontFace;
+	GLenum		frontMode;
+	GLenum		backMode;
+} CRPolygonStack;
+
+typedef struct {
+	GLint pattern[32];
+} CRPolygonStippleStack;
+
+typedef struct {
+	GLboolean	scissorTest;
+	GLint		scissorX;
+	GLint		scissorY;
+	GLsizei		scissorW;
+	GLsizei		scissorH;
+} CRScissorStack;
+
+typedef struct {
+	GLboolean	stencilTest;
+	GLenum		func;
+	GLint		mask;
+	GLint		ref;
+	GLenum		fail;
+	GLenum		passDepthFail;
+	GLenum		passDepthPass;
+	GLint		clearValue;
+	GLint		writeMask;
+} CRStencilBufferStack_v_33;
+
+typedef struct {
+    /* true if stencil test is enabled */
+    GLboolean   stencilTest;
+    /* true if GL_EXT_stencil_two_side is enabled (glEnable(GL_STENCIL_TEST_TWO_SIDE_EXT)) */
+    GLboolean   stencilTwoSideEXT;
+    /* GL_FRONT or GL_BACK */
+    GLenum      activeStencilFace;
+    GLint       clearValue;
+    GLint       writeMask;
+    CRStencilBufferState buffers[CRSTATE_STENCIL_BUFFER_COUNT];
+} CRStencilBufferStack;
+
+typedef struct {
+#if 111
+	GLuint		curTextureUnit;
+	CRTextureUnit unit[CR_MAX_TEXTURE_UNITS];
+
+#else
+	GLboolean	enabled1D[CR_MAX_TEXTURE_UNITS];
+	GLboolean	enabled2D[CR_MAX_TEXTURE_UNITS];
+	GLboolean	enabled3D[CR_MAX_TEXTURE_UNITS];
+# ifdef CR_ARB_texture_cube_map
+	GLboolean	enabledCubeMap[CR_MAX_TEXTURE_UNITS];
+# endif
+	CRTextureObj *current1D[CR_MAX_TEXTURE_UNITS];
+	CRTextureObj *current2D[CR_MAX_TEXTURE_UNITS];
+	CRTextureObj *current3D[CR_MAX_TEXTURE_UNITS];
+# ifdef CR_ARB_texture_cube_map
+	CRTextureObj *currentCubeMap[CR_MAX_TEXTURE_UNITS];
+# endif
+	GLcolorf borderColor[4];  /* 4 = 1D, 2D, 3D and cube map textures */
+	GLenum minFilter[4];
+	GLenum magFilter[4];
+	GLenum wrapS[4];
+	GLenum wrapT[4];
+# ifdef CR_OPENGL_VERSION_1_2
+	GLenum wrapR[4];
+	GLfloat priority[4];
+	GLfloat minLod[4];
+	GLfloat maxLod[4];
+	GLint baseLevel[4];
+	GLint maxLevel[4];
+# endif
+
+	GLuint		curTextureUnit;
+	GLenum		envMode[CR_MAX_TEXTURE_UNITS];
+	GLcolorf	envColor[CR_MAX_TEXTURE_UNITS];
+
+	GLtexcoordb	textureGen[CR_MAX_TEXTURE_UNITS];
+	GLvectorf	objSCoeff[CR_MAX_TEXTURE_UNITS];
+	GLvectorf	objTCoeff[CR_MAX_TEXTURE_UNITS];
+	GLvectorf	objRCoeff[CR_MAX_TEXTURE_UNITS];
+	GLvectorf	objQCoeff[CR_MAX_TEXTURE_UNITS];
+	GLvectorf	eyeSCoeff[CR_MAX_TEXTURE_UNITS];
+	GLvectorf	eyeTCoeff[CR_MAX_TEXTURE_UNITS];
+	GLvectorf	eyeRCoeff[CR_MAX_TEXTURE_UNITS];
+	GLvectorf	eyeQCoeff[CR_MAX_TEXTURE_UNITS];
+	GLtexcoorde	gen[CR_MAX_TEXTURE_UNITS];
+#endif
+} CRTextureStack;
+
+typedef struct {
+	GLenum matrixMode;
+	GLvectord  *clipPlane;
+	GLboolean  *clip;
+	GLboolean normalize;
+#ifdef CR_OPENGL_VERSION_1_2
+	GLboolean rescaleNormals;
+#endif
+} CRTransformStack;
+
+typedef struct {
+	GLint viewportX;
+	GLint viewportY;
+	GLint viewportW;
+	GLint viewportH;
+	GLclampd nearClip;
+	GLclampd farClip;
+} CRViewportStack;
+
+typedef struct {
+	GLint attribStackDepth;
+	CRbitvalue pushMaskStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint accumBufferStackDepth;
+	CRAccumBufferStack accumBufferStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint colorBufferStackDepth;
+	CRColorBufferStack colorBufferStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint currentStackDepth;
+	CRCurrentStack currentStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint depthBufferStackDepth;
+	CRDepthBufferStack depthBufferStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint enableStackDepth;
+	CREnableStack enableStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint evalStackDepth;
+	CREvalStack evalStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint fogStackDepth;
+	CRFogStack fogStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint hintStackDepth;
+	CRHintStack hintStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint lightingStackDepth;
+	CRLightingStack lightingStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint lineStackDepth;
+	CRLineStack lineStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint listStackDepth;
+	CRListStack listStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint pixelModeStackDepth;
+	CRPixelModeStack pixelModeStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint pointStackDepth;
+	CRPointStack pointStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint polygonStackDepth;
+	CRPolygonStack polygonStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint polygonStippleStackDepth;
+	CRPolygonStippleStack polygonStippleStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint scissorStackDepth;
+	CRScissorStack scissorStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint stencilBufferStackDepth;
+	CRStencilBufferStack stencilBufferStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint textureStackDepth;
+	CRTextureStack textureStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint transformStackDepth;
+	CRTransformStack transformStack[CR_MAX_ATTRIB_STACK_DEPTH];
+
+	GLint viewportStackDepth;
+	CRViewportStack viewportStack[CR_MAX_ATTRIB_STACK_DEPTH];
+} CRAttribState;
+
+DECLEXPORT(void) crStateAttribInit(CRAttribState *a);
+
+/* No diff! */
+DECLEXPORT(void) crStateAttribSwitch(CRAttribBits *bb, CRbitvalue *bitID, 
+												 CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_ATTRIB_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_buffer.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_buffer.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_buffer.h	(revision 86648)
@@ -0,0 +1,95 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_BUFFER_H
+#define CR_STATE_BUFFER_H
+
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue	dirty[CR_MAX_BITARRAY];
+	CRbitvalue	enable[CR_MAX_BITARRAY];
+	CRbitvalue	alphaFunc[CR_MAX_BITARRAY];
+	CRbitvalue	depthFunc[CR_MAX_BITARRAY];
+	CRbitvalue	blendFunc[CR_MAX_BITARRAY];
+	CRbitvalue	logicOp[CR_MAX_BITARRAY];
+	CRbitvalue	indexLogicOp[CR_MAX_BITARRAY];
+	CRbitvalue	drawBuffer[CR_MAX_BITARRAY];
+	CRbitvalue	readBuffer[CR_MAX_BITARRAY];
+	CRbitvalue	indexMask[CR_MAX_BITARRAY];
+	CRbitvalue	colorWriteMask[CR_MAX_BITARRAY];
+	CRbitvalue	clearColor[CR_MAX_BITARRAY];
+	CRbitvalue	clearIndex[CR_MAX_BITARRAY];
+	CRbitvalue	clearDepth[CR_MAX_BITARRAY];
+	CRbitvalue	clearAccum[CR_MAX_BITARRAY];
+	CRbitvalue	depthMask[CR_MAX_BITARRAY];
+#ifdef CR_EXT_blend_color
+	CRbitvalue	blendColor[CR_MAX_BITARRAY];
+#endif
+#if defined(CR_EXT_blend_minmax) || defined(CR_EXT_blend_subtract) || defined(CR_EXT_blend_logic_op)
+	CRbitvalue	blendEquation[CR_MAX_BITARRAY];
+#endif
+#if defined(CR_EXT_blend_func_separate)
+	CRbitvalue	blendFuncSeparate[CR_MAX_BITARRAY];
+#endif
+} CRBufferBits;
+
+typedef struct {
+	GLboolean	depthTest;
+	GLboolean	blend;
+	GLboolean	alphaTest;
+	GLboolean	logicOp;
+	GLboolean	indexLogicOp;
+	GLboolean	dither;
+	GLboolean	depthMask;
+
+	GLenum		alphaTestFunc;
+	GLfloat		alphaTestRef;
+	GLenum		depthFunc;
+	GLenum		blendSrcRGB;
+	GLenum		blendDstRGB;
+	GLenum		blendSrcA;
+	GLenum		blendDstA;
+	GLenum		logicOpMode;
+	GLenum		drawBuffer;
+	GLenum		readBuffer;
+	GLint		indexWriteMask;
+	GLcolorb	colorWriteMask;
+	GLcolorf	colorClearValue;
+	GLfloat 	indexClearValue;
+	GLdefault	depthClearValue;
+	GLcolorf	accumClearValue;
+#ifdef CR_EXT_blend_color
+	GLcolorf	blendColor;
+#endif
+#if defined(CR_EXT_blend_minmax) || defined(CR_EXT_blend_subtract)
+	GLenum		blendEquation;
+#endif
+
+    GLint       width, height;
+    GLint       storedWidth, storedHeight;
+    GLvoid      *pFrontImg;
+    GLvoid      *pBackImg;
+} CRBufferState;
+
+DECLEXPORT(void) crStateBufferInit(CRContext *ctx);
+
+DECLEXPORT(void) crStateBufferDiff(CRBufferBits *bb, CRbitvalue *bitID,
+                                   CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateBufferSwitch(CRBufferBits *bb, CRbitvalue *bitID, 
+                                     CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_BUFFER_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_bufferobject.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_bufferobject.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_bufferobject.h	(revision 86648)
@@ -0,0 +1,78 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_BUFFEROBJECT_H
+#define CR_STATE_BUFFEROBJECT_H
+
+#include "cr_hash.h"
+#include "state/cr_statetypes.h"
+
+#if defined(WINDOWS)
+#define STATE_APIENTRY __stdcall
+#else
+#define STATE_APIENTRY
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue	dirty[CR_MAX_BITARRAY];
+	CRbitvalue	arrayBinding[CR_MAX_BITARRAY];
+	CRbitvalue	elementsBinding[CR_MAX_BITARRAY];
+    CRbitvalue  packBinding[CR_MAX_BITARRAY];
+    CRbitvalue  unpackBinding[CR_MAX_BITARRAY];
+} CRBufferObjectBits;
+
+
+/*
+ * Buffer object, like a texture object, but encapsulates arbitrary
+ * data (vertex, image, etc).
+ */
+typedef struct {
+	GLuint refCount;
+	GLuint id;
+    GLuint hwid;
+	GLenum usage;
+	GLenum access;
+	GLuint size;      /* buffer size in bytes */
+	GLvoid *pointer;  /* only valid while buffer is mapped */
+	GLvoid *data;     /* the buffer data, if retainBufferData is true */
+    GLboolean bResyncOnRead; /* buffer data could be changed on server side, 
+                                so we need to resync every time guest wants to read from it*/
+	CRbitvalue dirty[CR_MAX_BITARRAY];  /* dirty data or state */
+	GLintptrARB dirtyStart, dirtyLength; /* dirty region */
+    /* bitfield representing the object usage. 1 means the object is used by the context with the given bitid */
+    CRbitvalue             ctxUsage[CR_MAX_BITARRAY];
+} CRBufferObject;
+
+typedef struct {
+	GLboolean retainBufferData;  /* should state tracker retain buffer data? */
+	CRBufferObject *arrayBuffer;
+	CRBufferObject *elementsBuffer;
+    CRBufferObject *packBuffer;
+    CRBufferObject *unpackBuffer;
+
+	CRBufferObject *nullBuffer;  /* name = 0 */
+    /** Attached state tracker. */
+    PCRStateTracker pStateTracker;
+} CRBufferObjectState;
+
+DECLEXPORT(CRBufferObject *) crStateGetBoundBufferObject(GLenum target, CRBufferObjectState *b);
+DECLEXPORT(GLboolean) crStateIsBufferBound(PCRStateTracker pState, GLenum target);
+struct CRContext;
+DECLEXPORT(GLboolean) crStateIsBufferBoundForCtx(struct CRContext *g, GLenum target);
+
+DECLEXPORT(GLuint) STATE_APIENTRY crStateBufferHWIDtoID(PCRStateTracker pState, GLuint hwid);
+DECLEXPORT(GLuint) STATE_APIENTRY crStateGetBufferHWID(PCRStateTracker pState, GLuint id);
+
+DECLEXPORT(void) crStateRegBuffers(PCRStateTracker pState, GLsizei n, GLuint *buffers);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_BUFFEROBJECT_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_client.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_client.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_client.h	(revision 86648)
@@ -0,0 +1,149 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_CLIENT_H
+#define CR_STATE_CLIENT_H
+
+#include "state/cr_statetypes.h"
+#include "state/cr_limits.h"
+#include "state/cr_bufferobject.h"
+#include "cr_bits.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+    CRbitvalue  dirty[CR_MAX_BITARRAY];
+    /* pixel pack/unpack */
+    CRbitvalue  pack[CR_MAX_BITARRAY];
+    CRbitvalue  unpack[CR_MAX_BITARRAY];
+    /* vertex array */
+    CRbitvalue  enableClientState[CR_MAX_BITARRAY];
+    CRbitvalue  clientPointer[CR_MAX_BITARRAY];
+    CRbitvalue  *v; /* vertex */
+    CRbitvalue  *n; /* normal */
+    CRbitvalue  *c; /* color */
+    CRbitvalue  *i; /* index */
+    CRbitvalue  *t[CR_MAX_TEXTURE_UNITS]; /* texcoord */
+    CRbitvalue  *e; /* edgeflag */
+    CRbitvalue  *s; /* secondary color */
+    CRbitvalue  *f; /* fog coord */
+#ifdef CR_NV_vertex_program
+    CRbitvalue  *a[CR_MAX_VERTEX_ATTRIBS]; /* NV_vertex_program */
+#endif
+} CRClientBits;
+
+/*
+ * NOTE!!!! If you change this structure, search through the code for
+ * occurrences of 'defaultPacking' and fix the static initializations!!!!
+ */
+typedef struct {
+    GLint       rowLength;
+    GLint       skipRows;
+    GLint       skipPixels;
+    GLint       alignment;
+    GLint       imageHeight;
+    GLint       skipImages;
+    GLboolean   swapBytes;
+    GLboolean   psLSBFirst; /* don't conflict with crap from Xlib.h */
+} CRPixelPackState;
+
+typedef struct {
+    unsigned char *p;
+    GLint size;
+    GLint type;
+    GLint stride;
+    GLboolean enabled;
+    GLboolean normalized; /* Added with GL_ARB_vertex_program */
+# ifndef IN_GUEST
+    GLboolean fRealPtr;   /**< @bugref{9407} */
+# endif
+    int bytesPerIndex;
+#ifdef CR_ARB_vertex_buffer_object
+    CRBufferObject *buffer;
+#endif
+#ifdef CR_EXT_compiled_vertex_array
+    GLboolean locked;
+# ifndef IN_GUEST
+    GLboolean fPrevRealPtr; /**< @bugref{9407} */
+# endif
+    unsigned char *prevPtr;
+    GLint   prevStride;
+#endif
+} CRClientPointer;
+
+typedef struct {
+    CRClientPointer v;                         /* vertex */
+    CRClientPointer n;                         /* normal */
+    CRClientPointer c;                         /* color */
+    CRClientPointer i;                         /* color index */
+    CRClientPointer t[CR_MAX_TEXTURE_UNITS];   /* texcoords */
+    CRClientPointer e;                         /* edge flags */
+    CRClientPointer s;                         /* secondary color */
+    CRClientPointer f;                         /* fog coord */
+#ifdef CR_NV_vertex_program
+    CRClientPointer a[CR_MAX_VERTEX_ATTRIBS];  /* vertex attribs */
+#endif
+#ifdef CR_NV_vertex_array_range
+    GLboolean arrayRange;
+    GLboolean arrayRangeValid;
+    void *arrayRangePointer;
+    GLuint arrayRangeLength;
+#endif
+#ifdef CR_EXT_compiled_vertex_array
+    GLint lockFirst;
+    GLint lockCount;
+    GLboolean locked;
+# ifdef IN_GUEST
+    GLboolean synced;
+# endif
+#endif
+} CRVertexArrays;
+
+#define CRSTATECLIENT_MAX_VERTEXARRAYS (7+CR_MAX_TEXTURE_UNITS+CR_MAX_VERTEX_ATTRIBS)
+
+typedef struct {
+    /* pixel pack/unpack */
+    CRPixelPackState pack;
+    CRPixelPackState unpack;
+
+    CRVertexArrays array;
+
+    GLint curClientTextureUnit;
+
+    /* state stacks (glPush/PopClientState) */
+    GLint attribStackDepth;
+    CRbitvalue pushMaskStack[CR_MAX_CLIENT_ATTRIB_STACK_DEPTH];
+
+    GLint pixelStoreStackDepth;
+    CRPixelPackState pixelPackStoreStack[CR_MAX_CLIENT_ATTRIB_STACK_DEPTH];
+    CRPixelPackState pixelUnpackStoreStack[CR_MAX_CLIENT_ATTRIB_STACK_DEPTH];
+
+    GLint vertexArrayStackDepth;
+    CRVertexArrays vertexArrayStack[CR_MAX_CLIENT_ATTRIB_STACK_DEPTH];
+} CRClientState;
+
+extern const CRPixelPackState crStateNativePixelPacking;
+
+struct CRContext;
+
+DECLEXPORT(void) crStateClientInitBits(CRClientBits *c);
+DECLEXPORT(void) crStateClientDestroyBits(CRClientBits *c);
+DECLEXPORT(void) crStateClientInit(struct CRContext *g);
+DECLEXPORT(void) crStateClientDestroy(struct CRContext *g);
+
+DECLEXPORT(GLboolean) crStateUseServerArrays(PCRStateTracker pState);
+DECLEXPORT(GLboolean) crStateUseServerArrayElements(PCRStateTracker pState);
+DECLEXPORT(CRClientPointer*) crStateGetClientPointerByIndex(int index, CRVertexArrays *array);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_CLIENT_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_current.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_current.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_current.h	(revision 86648)
@@ -0,0 +1,107 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_CURRENT_H
+#define CR_STATE_CURRENT_H
+
+#include "state/cr_currentpointers.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define VERT_ATTRIB_POS      0
+#define VERT_ATTRIB_WEIGHT   1
+#define VERT_ATTRIB_NORMAL   2
+#define VERT_ATTRIB_COLOR0   3
+#define VERT_ATTRIB_COLOR1   4
+#define VERT_ATTRIB_FOG      5
+#define VERT_ATTRIB_SIX      6
+#define VERT_ATTRIB_SEVEN    7
+#define VERT_ATTRIB_TEX0     8
+#define VERT_ATTRIB_TEX1     9
+#define VERT_ATTRIB_TEX2     10
+#define VERT_ATTRIB_TEX3     11
+#define VERT_ATTRIB_TEX4     12
+#define VERT_ATTRIB_TEX5     13
+#define VERT_ATTRIB_TEX6     14
+#define VERT_ATTRIB_TEX7     15
+#define VERT_ATTRIB_MAX      16
+
+
+typedef struct {
+	CRbitvalue  dirty[CR_MAX_BITARRAY];
+	/* Regardless of NV_vertex_program, we use this array */
+	CRbitvalue  vertexAttrib[CR_MAX_VERTEX_ATTRIBS][CR_MAX_BITARRAY];
+	CRbitvalue  edgeFlag[CR_MAX_BITARRAY];
+	CRbitvalue  colorIndex[CR_MAX_BITARRAY];
+	CRbitvalue  rasterPos[CR_MAX_BITARRAY];
+} CRCurrentBits;
+
+
+typedef struct {
+	/* Pre-transform values */
+	/* Regardless of NV_vertex_program, we use this array */
+	GLfloat   attrib[CR_MAX_VERTEX_ATTRIBS][4];
+	GLboolean edgeFlag;
+	GLfloat   colorIndex;
+	/* Post-transform values */
+	GLvectorf	eyePos;
+	GLvectorf	clipPos;
+	GLvectorf	winPos;
+} CRVertex;
+
+
+typedef struct {
+	/* Regardless of NV_vertex_program, we use this array */
+	GLfloat  vertexAttrib[CR_MAX_VERTEX_ATTRIBS][4];
+	GLfloat  vertexAttribPre[CR_MAX_VERTEX_ATTRIBS][4];
+
+	CRCurrentStatePointers   *current;
+
+	GLboolean    rasterValid;
+	GLfloat      rasterAttrib[CR_MAX_VERTEX_ATTRIBS][4];
+	GLfloat      rasterAttribPre[CR_MAX_VERTEX_ATTRIBS][4];
+
+	GLdouble     rasterIndex;
+	GLboolean    edgeFlag;
+	GLboolean    edgeFlagPre;
+	GLfloat      colorIndex;
+	GLfloat      colorIndexPre;
+
+	/* XXX this isn't really "current" state - move someday */
+	GLuint       attribsUsedMask;  /* for ARB_vertex_program */
+	GLboolean    inBeginEnd;
+	GLenum       mode;
+	GLuint       beginEndMax;
+	GLuint       beginEndNum;
+	GLuint       flushOnEnd;
+
+} CRCurrentState;
+
+DECLEXPORT(void) crStateCurrentInit( CRContext *ctx );
+
+DECLEXPORT(void) crStateCurrentRecover(PCRStateTracker pState);
+
+DECLEXPORT(void) crStateCurrentRecoverNew(CRContext *g, CRCurrentStatePointers  *current);
+
+DECLEXPORT(void) crStateCurrentDiff(CRCurrentBits *bb, CRbitvalue *bitID,
+                                    CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateCurrentSwitch(CRCurrentBits *bb, CRbitvalue *bitID,
+                                    CRContext *fromCtx, CRContext *toCtx);
+
+DECLEXPORT(void) crStateRasterPosUpdate(PCRStateTracker pState, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+
+DECLEXPORT(GLuint) crStateNeedDummyZeroVertexArray(CRContext *g, CRCurrentStatePointers  *current, GLfloat *pZva);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_CURRENT_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_evaluators.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_evaluators.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_evaluators.h	(revision 86648)
@@ -0,0 +1,91 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_EVALUATORS
+#define CR_STATE_EVALUATORS
+
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#define GLEVAL_TOT 9
+#define MAX_EVAL_ORDER 30
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue eval1D[GLEVAL_TOT][CR_MAX_BITARRAY];
+	CRbitvalue eval2D[GLEVAL_TOT][CR_MAX_BITARRAY];
+	CRbitvalue enable[CR_MAX_BITARRAY];
+	CRbitvalue enable1D[GLEVAL_TOT][CR_MAX_BITARRAY];
+	CRbitvalue enable2D[GLEVAL_TOT][CR_MAX_BITARRAY];
+	CRbitvalue grid1D[CR_MAX_BITARRAY];
+	CRbitvalue grid2D[CR_MAX_BITARRAY];
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+#ifdef CR_NV_vertex_program
+	CRbitvalue enableAttrib1D[CR_MAX_VERTEX_ATTRIBS];
+	CRbitvalue enableAttrib2D[CR_MAX_VERTEX_ATTRIBS];
+#endif
+} CREvaluatorBits;
+
+typedef struct {
+	GLfloat  u1, u2;
+	GLfloat  du;
+	GLint    order;
+	GLfloat  *coeff;
+} CREvaluator1D;
+
+typedef struct {
+	GLfloat  u1, u2;
+	GLfloat  v1, v2;
+	GLfloat  du, dv;
+	GLint    uorder;
+	GLint    vorder;
+	GLfloat  *coeff;
+} CREvaluator2D;
+
+typedef struct {
+	GLboolean  enable1D[GLEVAL_TOT];
+	GLboolean  enable2D[GLEVAL_TOT];
+#ifdef CR_NV_vertex_program
+	GLboolean  enableAttrib1D[CR_MAX_VERTEX_ATTRIBS];
+	GLboolean  enableAttrib2D[CR_MAX_VERTEX_ATTRIBS];
+#endif
+	GLboolean  autoNormal;
+
+	CREvaluator1D   eval1D[GLEVAL_TOT];
+	CREvaluator2D   eval2D[GLEVAL_TOT];
+#ifdef CR_NV_vertex_program
+	CREvaluator1D   attribEval1D[CR_MAX_VERTEX_ATTRIBS];
+	CREvaluator2D   attribEval2D[CR_MAX_VERTEX_ATTRIBS];
+#endif
+
+	GLint      un1D;        /* GL_MAP1_GRID_SEGMENTS */
+	GLfloat    u11D, u21D;  /* GL_MAP1_GRID_DOMAIN */
+
+	GLint      un2D;        /* GL_MAP2_GRID_SEGMENTS (u) */
+	GLint      vn2D;        /* GL_MAP2_GRID_SEGMENTS (v) */
+	GLfloat    u12D, u22D;  /* GL_MAP2_GRID_DOMAIN (u) */
+	GLfloat    v12D, v22D;  /* GL_MAP2_GRID_DOMAIN (v) */
+} CREvaluatorState;
+
+extern const int gleval_sizes[];
+
+DECLEXPORT(void) crStateEvaluatorInit (CRContext *ctx);
+DECLEXPORT(void) crStateEvaluatorDestroy (CRContext *ctx);
+
+DECLEXPORT(void) crStateEvaluatorDiff(CREvaluatorBits *e, CRbitvalue *bitID,
+                          CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateEvaluatorSwitch(CREvaluatorBits *e, CRbitvalue *bitID, 
+                            CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_EVALUATORS */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_feedback.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_feedback.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_feedback.h	(revision 86648)
@@ -0,0 +1,56 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_FEEDBACK_H 
+#define CR_STATE_FEEDBACK_H 
+
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAX_NAME_STACK_DEPTH 64
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+} CRFeedbackBits;
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+} CRSelectionBits;
+
+typedef struct {
+	GLenum	type;
+	GLuint	mask;
+	GLfloat	*buffer;
+	GLuint	bufferSize;
+	GLuint	count;
+} CRFeedbackState;
+
+typedef struct {
+   	GLuint *buffer;
+   	GLuint bufferSize;
+   	GLuint bufferCount;
+   	GLuint hits;
+   	GLuint nameStackDepth;
+   	GLuint nameStack[MAX_NAME_STACK_DEPTH];
+   	GLboolean hitFlag;
+   	GLfloat hitMinZ, hitMaxZ;
+} CRSelectionState;
+
+extern DECLEXPORT(void) crStateFeedbackDiff(CRFeedbackState *from, CRFeedbackState *to,
+                                            CRFeedbackBits *bb, CRbitvalue *bitID);
+extern DECLEXPORT(void) crStateFeedbackSwitch(CRFeedbackBits *bb, CRbitvalue *bitID, 
+                                              CRFeedbackState *from, CRFeedbackState *to);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_FEEDBACK_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_fog.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_fog.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_fog.h	(revision 86648)
@@ -0,0 +1,62 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_FOG_H 
+#define CR_STATE_FOG_H 
+
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+	CRbitvalue color[CR_MAX_BITARRAY];
+	CRbitvalue index[CR_MAX_BITARRAY];
+	CRbitvalue density[CR_MAX_BITARRAY];
+	CRbitvalue start[CR_MAX_BITARRAY];
+	CRbitvalue end[CR_MAX_BITARRAY];
+	CRbitvalue mode[CR_MAX_BITARRAY];
+	CRbitvalue enable[CR_MAX_BITARRAY];
+#ifdef CR_NV_fog_distance
+	CRbitvalue fogDistanceMode[CR_MAX_BITARRAY];
+#endif
+#ifdef CR_EXT_fog_coord
+	CRbitvalue fogCoordinateSource[CR_MAX_BITARRAY];
+#endif
+} CRFogBits;
+
+typedef struct {
+	GLcolorf  color;
+	GLint     index;
+	GLfloat   density;
+	GLfloat   start;
+	GLfloat   end;
+	GLint     mode;
+	GLboolean enable;
+#ifdef CR_NV_fog_distance
+	GLenum fogDistanceMode;
+#endif
+#ifdef CR_EXT_fog_coord
+	GLenum fogCoordinateSource;
+#endif
+} CRFogState;
+
+DECLEXPORT(void) crStateFogInit(CRContext *ctx);
+
+DECLEXPORT(void) crStateFogDiff(CRFogBits *bb, CRbitvalue *bitID,
+                                CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateFogSwitch(CRFogBits *bb, CRbitvalue *bitID, 
+                                  CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_FOG_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h	(revision 86648)
@@ -0,0 +1,108 @@
+/* $Id$ */
+
+/** @file
+ * VBox crOpenGL: FBO related state info
+ */
+
+/*
+ * Copyright (C) 2009-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+#ifndef CR_STATE_FRAMEBUFFEROBJECT_H
+#define CR_STATE_FRAMEBUFFEROBJECT_H
+
+#include "cr_hash.h"
+#include "state/cr_statetypes.h"
+#include "state/cr_statefuncs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CR_MAX_COLOR_ATTACHMENTS 16
+
+typedef struct {
+    GLenum  type; /*one of GL_NONE GL_TEXTURE GL_RENDERBUFFER_EXT*/
+    GLuint  name;
+    GLint   level;
+    GLint   face;
+    GLint   zoffset;
+} CRFBOAttachmentPoint;
+
+typedef struct {
+    GLuint                  id, hwid;
+    CRFBOAttachmentPoint    color[CR_MAX_COLOR_ATTACHMENTS];
+    CRFBOAttachmentPoint    depth;
+    CRFBOAttachmentPoint    stencil;
+    GLenum                  readbuffer;
+    /*@todo: we don't support drawbufferS yet, so it's a stub*/
+    GLenum                  drawbuffer[1];
+#ifdef IN_GUEST
+    GLenum                  status;
+#endif
+    /* bitfield representing the object usage. 1 means the object is used by the context with the given bitid */
+    CRbitvalue             ctxUsage[CR_MAX_BITARRAY];
+} CRFramebufferObject;
+
+typedef struct {
+    GLuint   id, hwid;
+    GLsizei  width, height;
+    GLenum   internalformat;
+    GLuint   redBits, greenBits, blueBits, alphaBits, depthBits, stencilBits;
+    /* bitfield representing the object usage. 1 means the object is used by the context with the given bitid */
+    CRbitvalue             ctxUsage[CR_MAX_BITARRAY];
+} CRRenderbufferObject;
+
+typedef struct {
+    CRFramebufferObject     *readFB, *drawFB;
+    CRRenderbufferObject    *renderbuffer;
+} CRFramebufferObjectState;
+
+DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectInit(CRContext *ctx);
+DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectDestroy(CRContext *ctx);
+DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectSwitch(CRContext *from, CRContext *to);
+
+DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectDisableHW(CRContext *ctx, GLuint idDrawFBO, GLuint idReadFBO);
+DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectReenableHW(CRContext *fromCtx, CRContext *toCtx, GLuint idDrawFBO, GLuint idReadFBO);
+
+DECLEXPORT(GLuint) STATE_APIENTRY crStateGetFramebufferHWID(PCRStateTracker pState, GLuint id);
+DECLEXPORT(GLuint) STATE_APIENTRY crStateGetRenderbufferHWID(PCRStateTracker pState, GLuint id);
+
+DECLEXPORT(void) STATE_APIENTRY crStateBindRenderbufferEXT(PCRStateTracker pState, GLenum target, GLuint renderbuffer);
+DECLEXPORT(void) STATE_APIENTRY crStateDeleteRenderbuffersEXT(PCRStateTracker pState, GLsizei n, const GLuint *renderbuffers);
+DECLEXPORT(void) STATE_APIENTRY crStateRenderbufferStorageEXT(PCRStateTracker pState, GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+DECLEXPORT(void) STATE_APIENTRY crStateGetRenderbufferParameterivEXT(PCRStateTracker pState, GLenum target, GLenum pname, GLint *params);
+DECLEXPORT(void) STATE_APIENTRY crStateBindFramebufferEXT(PCRStateTracker pState, GLenum target, GLuint framebuffer);
+DECLEXPORT(void) STATE_APIENTRY crStateDeleteFramebuffersEXT(PCRStateTracker pState, GLsizei n, const GLuint *framebuffers);
+DECLEXPORT(void) STATE_APIENTRY crStateFramebufferTexture1DEXT(PCRStateTracker pState, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+DECLEXPORT(void) STATE_APIENTRY crStateFramebufferTexture2DEXT(PCRStateTracker pState, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+DECLEXPORT(void) STATE_APIENTRY crStateFramebufferTexture3DEXT(PCRStateTracker pState, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+DECLEXPORT(void) STATE_APIENTRY crStateFramebufferRenderbufferEXT(PCRStateTracker pState, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+DECLEXPORT(void) STATE_APIENTRY crStateGetFramebufferAttachmentParameterivEXT(PCRStateTracker pState, GLenum target, GLenum attachment, GLenum pname, GLint *params);
+DECLEXPORT(void) STATE_APIENTRY crStateGenerateMipmapEXT(PCRStateTracker pState, GLenum target);
+
+DECLEXPORT(GLuint) STATE_APIENTRY crStateFBOHWIDtoID(PCRStateTracker pState, GLuint hwid);
+DECLEXPORT(GLuint) STATE_APIENTRY crStateRBOHWIDtoID(PCRStateTracker pState, GLuint hwid);
+
+DECLEXPORT(void) crStateRegFramebuffers(PCRStateTracker pState, GLsizei n, GLuint *buffers);
+DECLEXPORT(void) crStateRegRenderbuffers(PCRStateTracker pState, GLsizei n, GLuint *buffers);
+
+#ifdef IN_GUEST
+DECLEXPORT(GLenum) STATE_APIENTRY crStateCheckFramebufferStatusEXT(PCRStateTracker pState, GLenum target);
+DECLEXPORT(GLenum) STATE_APIENTRY crStateSetFramebufferStatus(PCRStateTracker pState, GLenum target, GLenum status);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_FRAMEBUFFEROBJECT_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_glsl.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_glsl.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_glsl.h	(revision 86648)
@@ -0,0 +1,122 @@
+/* $Id$ */
+
+/** @file
+ * VBox crOpenGL: GLSL related state info
+ */
+
+/*
+ * Copyright (C) 2009-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef CR_STATE_GLSL_H
+#define CR_STATE_GLSL_H
+
+#include "cr_hash.h"
+#include "state/cr_statetypes.h"
+#include "state/cr_statefuncs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* We can't go the "easy" way of just extracting all the required data when taking snapshots.
+   Shader objects might be modified *after* program linkage and wouldn't affect program until it's relinked.
+   So we have to keep track of shaders statuses right before each program was linked as well as their "current" status.
+*/
+
+/*@todo: check rare case when successfully linked and active program is relinked with failure*/
+
+typedef struct {
+    GLuint      id, hwid;
+    GLenum      type;               /*GL_VERTEX_SHADER or GL_FRAGMENT_SHADER*/
+    GLchar*     source;             /*NULL after context loading unless in program's "active" hash*/
+    GLboolean   compiled, deleted;
+    GLuint      refCount;           /*valid only for shaders in CRGLSLState's hash*/
+} CRGLSLShader;
+
+typedef struct {
+    GLchar* name;
+    GLuint index;
+} CRGLSLAttrib;
+
+/*Note: active state will hold copies of shaders while current state references shaders in the CRGLSLState hashtable*/
+/*@todo: probably don't need a hashtable here*/
+typedef struct {
+    CRHashTable  *attachedShaders;
+    CRGLSLAttrib *pAttribs; /*several names could be bound to the same index*/
+    GLuint        cAttribs;
+} CRGLSLProgramState;
+
+typedef struct{
+    GLchar *name;
+    GLenum  type;
+    GLvoid *data;
+#ifdef IN_GUEST
+    GLint  location;
+#endif
+} CRGLSLUniform;
+
+typedef struct {
+    GLuint              id, hwid;
+    GLboolean           validated, linked, deleted;
+    CRGLSLProgramState  activeState, currentState;
+    CRGLSLUniform      *pUniforms;
+    GLuint              cUniforms;
+#ifdef IN_GUEST
+    CRGLSLAttrib        *pAttribs;
+    GLuint              cAttribs;
+    GLboolean           bUniformsSynced; /*uniforms info is updated since last link program call.*/
+    GLboolean           bAttribsSynced; /*attribs info is updated since last link program call.*/
+#endif
+} CRGLSLProgram;
+
+typedef struct {
+    CRHashTable *shaders;
+    CRHashTable *programs;
+
+    CRGLSLProgram *activeProgram;
+
+    /* Indicates that we have to resend GLSL data to GPU on first glMakeCurrent call with owning context */
+    GLboolean   bResyncNeeded;
+} CRGLSLState;
+
+DECLEXPORT(void) STATE_APIENTRY crStateGLSLInit(CRContext *ctx);
+DECLEXPORT(void) STATE_APIENTRY crStateGLSLDestroy(CRContext *ctx);
+DECLEXPORT(void) STATE_APIENTRY crStateGLSLSwitch(CRContext *from, CRContext *to);
+
+DECLEXPORT(GLuint) STATE_APIENTRY crStateGetShaderHWID(PCRStateTracker pState, GLuint id);
+DECLEXPORT(GLuint) STATE_APIENTRY crStateGetProgramHWID(PCRStateTracker pState, GLuint id);
+DECLEXPORT(GLuint) STATE_APIENTRY crStateGLSLProgramHWIDtoID(PCRStateTracker pState, GLuint hwid);
+DECLEXPORT(GLuint) STATE_APIENTRY crStateGLSLShaderHWIDtoID(PCRStateTracker pState, GLuint hwid);
+
+DECLEXPORT(GLint) STATE_APIENTRY crStateGetUniformSize(PCRStateTracker pState, GLenum type);
+DECLEXPORT(GLboolean) STATE_APIENTRY crStateIsIntUniform(PCRStateTracker pState, GLenum type);
+
+DECLEXPORT(GLuint) STATE_APIENTRY crStateCreateShader(PCRStateTracker pState, GLuint id, GLenum type);
+DECLEXPORT(GLuint) STATE_APIENTRY crStateCreateProgram(PCRStateTracker pState, GLuint id);
+DECLEXPORT(GLuint) STATE_APIENTRY crStateDeleteObjectARB(PCRStateTracker pState, VBoxGLhandleARB obj );
+
+DECLEXPORT(GLboolean) STATE_APIENTRY crStateIsProgramUniformsCached(PCRStateTracker pState, GLuint program);
+DECLEXPORT(GLboolean) STATE_APIENTRY crStateIsProgramAttribsCached(PCRStateTracker pState, GLuint program);
+
+#ifdef IN_GUEST
+DECLEXPORT(void) STATE_APIENTRY crStateGLSLProgramCacheUniforms(PCRStateTracker pState, GLuint program, GLsizei cbData, GLvoid *pData);
+DECLEXPORT(void) STATE_APIENTRY crStateGLSLProgramCacheAttribs(PCRStateTracker pState, GLuint program, GLsizei cbData, GLvoid *pData);
+#else
+DECLEXPORT(void) STATE_APIENTRY crStateGLSLProgramCacheUniforms(PCRStateTracker pState, GLuint program, GLsizei maxcbData, GLsizei *cbData, GLvoid *pData);
+DECLEXPORT(void) STATE_APIENTRY crStateGLSLProgramCacheAttribs(PCRStateTracker pState, GLuint program, GLsizei maxcbData, GLsizei *cbData, GLvoid *pData);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_GLSL_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_hint.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_hint.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_hint.h	(revision 86648)
@@ -0,0 +1,62 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_HINT_H 
+#define CR_STATE_HINT_H 
+
+#include "state/cr_statetypes.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+	CRbitvalue perspectiveCorrection[CR_MAX_BITARRAY];
+	CRbitvalue pointSmooth[CR_MAX_BITARRAY];
+	CRbitvalue lineSmooth[CR_MAX_BITARRAY];
+	CRbitvalue polygonSmooth[CR_MAX_BITARRAY];
+	CRbitvalue fog[CR_MAX_BITARRAY];
+#ifdef CR_EXT_clip_volume_hint
+	CRbitvalue clipVolumeClipping[CR_MAX_BITARRAY];
+#endif
+#ifdef CR_ARB_texture_compression
+	CRbitvalue textureCompression[CR_MAX_BITARRAY];
+#endif
+#ifdef CR_SGIS_generate_mipmap
+	CRbitvalue generateMipmap[CR_MAX_BITARRAY];
+#endif
+} CRHintBits;
+
+typedef struct {
+	GLenum perspectiveCorrection;
+	GLenum pointSmooth;
+	GLenum lineSmooth;
+	GLenum polygonSmooth;
+	GLenum fog;
+#ifdef CR_EXT_clip_volume_hint
+	GLenum clipVolumeClipping;
+#endif
+#ifdef CR_ARB_texture_compression
+	GLenum textureCompression;
+#endif
+#ifdef CR_SGIS_generate_mipmap
+	GLenum generateMipmap;
+#endif
+} CRHintState;
+
+DECLEXPORT(void) crStateHintInit(CRContext *ctx);
+
+DECLEXPORT(void) crStateHintDiff(CRHintBits *bb, CRbitvalue *bitID,
+                                 CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateHintSwitch(CRHintBits *bb, CRbitvalue *bitID, 
+                                   CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_HINT_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_lighting.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_lighting.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_lighting.h	(revision 86648)
@@ -0,0 +1,92 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_LIGHTING_H
+#define CR_STATE_LIGHTING_H
+
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+	CRbitvalue enable[CR_MAX_BITARRAY];
+	CRbitvalue ambient[CR_MAX_BITARRAY];
+	CRbitvalue diffuse[CR_MAX_BITARRAY];
+	CRbitvalue specular[CR_MAX_BITARRAY];
+	CRbitvalue position[CR_MAX_BITARRAY];
+	CRbitvalue attenuation[CR_MAX_BITARRAY];
+	CRbitvalue spot[CR_MAX_BITARRAY];
+} CRLightBits;
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+	CRbitvalue shadeModel[CR_MAX_BITARRAY];
+	CRbitvalue colorMaterial[CR_MAX_BITARRAY];
+	CRbitvalue lightModel[CR_MAX_BITARRAY];
+	CRbitvalue material[CR_MAX_BITARRAY];
+	CRbitvalue enable[CR_MAX_BITARRAY];
+	CRLightBits *light;
+} CRLightingBits;
+
+typedef struct {
+	GLboolean	enable;
+	GLcolorf	ambient;
+	GLcolorf	diffuse;
+	GLcolorf	specular;
+	GLvectorf	position;
+	GLvectorf	objPosition;
+	GLfloat		constantAttenuation;
+	GLfloat		linearAttenuation;
+	GLfloat		quadraticAttenuation;
+	GLvectorf	spotDirection;
+	GLfloat 	spotExponent;
+	GLfloat		spotCutoff;
+} CRLight;
+
+typedef struct {
+	GLboolean	lighting;
+	GLboolean	colorMaterial;
+	GLenum		shadeModel;
+	GLenum		colorMaterialMode;
+	GLenum		colorMaterialFace;
+	GLcolorf	ambient[2];     /* material front/back */
+	GLcolorf	diffuse[2];     /* material front/back */
+	GLcolorf	specular[2];     /* material front/back */
+	GLcolorf	emission[2];     /* material front/back */
+	GLfloat		shininess[2];     /* material front/back */
+	GLint       indexes[2][3];    /* material front/back amb/diff/spec */
+	GLcolorf	lightModelAmbient;
+	GLboolean	lightModelLocalViewer;
+	GLboolean	lightModelTwoSide;
+#if defined(CR_EXT_separate_specular_color) || defined(CR_OPENGL_VERSION_1_2)
+	GLenum		lightModelColorControlEXT; /* CR_EXT_separate_specular_color */
+#endif
+	GLboolean	colorSumEXT; /* CR_EXT_secondary_color */
+	CRLight		*light;
+} CRLightingState;
+
+DECLEXPORT(void) crStateLightingInitBits (CRLightingBits *l);
+DECLEXPORT(void) crStateLightingDestroyBits (CRLightingBits *l);
+DECLEXPORT(void) crStateLightingInit (CRContext *ctx);
+DECLEXPORT(void) crStateLightingDestroy (CRContext *ctx);
+
+DECLEXPORT(void) crStateLightingDiff(CRLightingBits *bb, CRbitvalue *bitID,
+                                     CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateLightingSwitch(CRLightingBits *bb, CRbitvalue *bitID,
+                                       CRContext *fromCtx, CRContext *toCtx);
+
+DECLEXPORT(void) crStateColorMaterialRecover(PCRStateTracker pState);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_LIGHTING_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_limits.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_limits.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_limits.h	(revision 86648)
@@ -0,0 +1,285 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_LIMITS_H
+#define CR_LIMITS_H
+
+#include "chromium.h"
+#include "cr_version.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* glGetString strings */
+#define CR_RENDERER "Chromium"
+#define CR_VENDOR "Humper"
+
+
+#define CR_MAX_TEXTURE_UNITS		8
+#define CR_MAX_GENERAL_COMBINERS	8
+#define CR_MAX_TEXTURE_SIZE		8192
+#define CR_MAX_3D_TEXTURE_SIZE		512
+#define CR_MAX_CUBE_TEXTURE_SIZE	4096
+#define CR_MAX_RECTANGLE_TEXTURE_SIZE	4096
+#define CR_MAX_TEXTURE_ANISOTROPY	8.0
+#define CR_MAX_LIGHTS			8
+#define CR_MAX_CLIP_PLANES		8
+#define CR_MAX_PROJECTION_STACK_DEPTH	32
+#define CR_MAX_MODELVIEW_STACK_DEPTH	32
+#define CR_MAX_TEXTURE_STACK_DEPTH	10
+#define CR_MAX_COLOR_STACK_DEPTH	2
+#define CR_MAX_ATTRIB_STACK_DEPTH	16
+#define CR_MAX_CLIENT_ATTRIB_STACK_DEPTH	16
+#define CR_MAX_NAME_STACK_DEPTH		64
+#define CR_MAX_ELEMENTS_INDICES		16384
+#define CR_MAX_ELEMENTS_VERTICES	16384
+#define CR_MAX_EVAL_ORDER		8
+#define CR_MAX_LIST_NESTING		64
+#define CR_MAX_PIXEL_MAP_TABLE		256
+#define CR_MAX_VIEWPORT_DIM		16384
+#define CR_SUBPIXEL_BITS		8
+#define CR_ALIASED_POINT_SIZE_MIN	1.0
+#define CR_ALIASED_POINT_SIZE_MAX	64.0
+#define CR_SMOOTH_POINT_SIZE_MIN	1.0
+#define CR_SMOOTH_POINT_SIZE_MAX	64.0
+#define CR_POINT_SIZE_GRANULARITY	0.5
+#define CR_ALIASED_LINE_WIDTH_MIN	1.0
+#define CR_ALIASED_LINE_WIDTH_MAX	64.0
+#define CR_SMOOTH_LINE_WIDTH_MIN	1.0
+#define CR_SMOOTH_LINE_WIDTH_MAX	64.0
+#define CR_LINE_WIDTH_GRANULARITY	0.5
+#define CR_MAX_VERTEX_ATTRIBS           16
+#define CR_MAX_TEXTURE_LOD_BIAS         8.0
+#ifdef CR_NV_fragment_program
+#define CR_MAX_TEXTURE_COORDS           2
+#define CR_MAX_TEXTURE_IMAGE_UNITS      2
+#define CR_MAX_FRAGMENT_LOCAL_PARAMS    64
+#endif
+#ifdef CR_NV_vertex_program
+#define CR_MAX_PROGRAM_MATRICES           8
+#define CR_MAX_PROGRAM_MATRIX_STACK_DEPTH 4
+#endif
+#ifdef CR_ARB_fragment_program
+#define CR_MAX_FRAGMENT_PROGRAM_INSTRUCTIONS       72
+#define CR_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMS       24
+#define CR_MAX_FRAGMENT_PROGRAM_ENV_PARAMS         256
+#define CR_MAX_FRAGMENT_PROGRAM_TEMPS              16
+#define CR_MAX_FRAGMENT_PROGRAM_ATTRIBS            10
+#define CR_MAX_FRAGMENT_PROGRAM_ADDRESS_REGS        1
+#define CR_MAX_FRAGMENT_PROGRAM_ALU_INSTRUCTIONS   48
+#define CR_MAX_FRAGMENT_PROGRAM_TEX_INSTRUCTIONS   24
+#define CR_MAX_FRAGMENT_PROGRAM_TEX_INDIRECTIONS    4
+#endif
+#ifdef CR_ARB_vertex_program
+#define CR_MAX_VERTEX_PROGRAM_INSTRUCTIONS 128
+#define CR_MAX_VERTEX_PROGRAM_LOCAL_PARAMS  96
+#define CR_MAX_VERTEX_PROGRAM_ENV_PARAMS   256 /* for GL_NV_vertex_program2 */
+#define CR_MAX_VERTEX_PROGRAM_TEMPS         12
+#define CR_MAX_VERTEX_PROGRAM_ATTRIBS       16
+#define CR_MAX_VERTEX_PROGRAM_ADDRESS_REGS   1
+#endif
+
+#if defined(CR_ARB_vertex_program) || defined(CR_ARB_fragment_program)
+/* These must be the max of the fragment and vertex program limits */
+#define CR_MAX_PROGRAM_LOCAL_PARAMS  (CR_MAX_VERTEX_PROGRAM_LOCAL_PARAMS > CR_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMS ? CR_MAX_VERTEX_PROGRAM_LOCAL_PARAMS : CR_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMS)
+
+#define CR_MAX_PROGRAM_ENV_PARAMS  (CR_MAX_VERTEX_PROGRAM_ENV_PARAMS > CR_MAX_FRAGMENT_PROGRAM_ENV_PARAMS ? CR_MAX_VERTEX_PROGRAM_ENV_PARAMS : CR_MAX_FRAGMENT_PROGRAM_ENV_PARAMS)
+#endif
+
+
+/* Just need these for autogenerated code in state_get.c, etc */
+#if defined(CR_ARB_vertex_program) || defined(CR_NV_vertex_program)
+#define CR_any_vertex_program 1
+#endif
+
+#if defined(CR_ARB_fragment_program) || defined(CR_NV_fragment_program)
+#define CR_any_fragment_program 1
+#endif
+
+#if defined(CR_any_vertex_program) || defined(CR_any_fragment_program)
+#define CR_any_program 1
+#endif
+
+
+
+/*
+ * OpenGL's implementation-dependent values (not part of any attribute group).
+ */
+typedef struct {
+	GLuint maxTextureUnits;
+	GLuint maxTextureSize;
+	GLuint max3DTextureSize;	/* OpenGL 1.2 */
+#ifdef CR_ARB_texture_cube_map
+	GLuint maxCubeMapTextureSize;
+#endif
+	GLuint maxLights;
+	GLuint maxClipPlanes;
+	GLuint maxProjectionStackDepth;
+	GLuint maxModelviewStackDepth;
+	GLuint maxTextureStackDepth;
+	GLuint maxColorStackDepth;	/* OpenGL 1.2 */
+	GLuint maxAttribStackDepth;
+	GLuint maxClientAttribStackDepth;
+	GLuint maxNameStackDepth;
+	GLuint maxElementsIndices;
+	GLuint maxElementsVertices;
+	GLuint maxEvalOrder;
+	GLuint maxListNesting;
+	GLuint maxPixelMapTable;
+	GLint maxViewportDims[2];
+	GLuint subpixelBits;
+	GLfloat aliasedPointSizeRange[2];
+	GLfloat smoothPointSizeRange[2];
+	GLfloat pointSizeGranularity;
+	GLfloat aliasedLineWidthRange[2];
+	GLfloat smoothLineWidthRange[2];
+	GLfloat lineWidthGranularity;
+#ifdef CR_EXT_texture_lod_bias
+	GLfloat maxTextureLodBias;
+#endif
+#ifdef CR_EXT_texture_filter_anisotropic
+	GLfloat maxTextureAnisotropy;
+#endif
+#ifdef CR_ARB_texture_compression
+	GLuint numCompressedFormats;
+	GLenum compressedFormats[10];
+#endif
+#ifdef CR_NV_register_combiners
+	GLuint maxGeneralCombiners;
+#endif
+#ifdef CR_NV_texture_rectangle
+	GLuint maxRectTextureSize;
+#endif
+#ifdef CR_NV_fragment_program
+	GLuint maxTextureCoords;
+	GLuint maxTextureImageUnits;
+	/*GLuint maxFragmentProgramLocalParams;*/
+#endif
+#ifdef CR_NV_vertex_program
+	GLuint maxProgramMatrixStackDepth;
+	GLuint maxProgramMatrices;
+#endif
+#ifdef CR_ARB_fragment_program
+	GLuint maxFragmentProgramInstructions;
+	GLuint maxFragmentProgramLocalParams;
+	GLuint maxFragmentProgramEnvParams;
+	GLuint maxFragmentProgramTemps;
+	GLuint maxFragmentProgramAttribs;
+	GLuint maxFragmentProgramAddressRegs;
+	GLuint maxFragmentProgramAluInstructions;
+	GLuint maxFragmentProgramTexInstructions;
+	GLuint maxFragmentProgramTexIndirections;
+#endif
+#ifdef CR_ARB_vertex_program
+	GLuint maxVertexProgramInstructions;
+	GLuint maxVertexProgramLocalParams;
+	GLuint maxVertexProgramEnvParams;
+	GLuint maxVertexProgramTemps;
+	GLuint maxVertexProgramAttribs;
+	GLuint maxVertexProgramAddressRegs;
+#endif
+	const GLubyte *extensions;
+
+	/* Framebuffer/visual attributes */
+	GLuint redBits, greenBits, blueBits, alphaBits;
+	GLuint depthBits, stencilBits, indexBits;
+	GLuint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
+	GLuint auxBuffers;
+	GLboolean rgbaMode;
+	GLboolean doubleBuffer;
+	GLboolean stereo;
+	GLuint sampleBuffers;
+	GLuint samples;
+	GLuint level;
+
+} CRLimitsState;
+
+
+/* Booleans to indicate which OpenGL extensions are supported at runtime.
+ * XXX might merge this into the above structure someday.
+ */
+typedef struct {
+	GLboolean ARB_depth_texture;
+	GLboolean ARB_fragment_program;
+	GLboolean ARB_imaging;
+	GLboolean ARB_multisample;
+	GLboolean ARB_multitexture;
+	GLboolean ARB_occlusion_query;
+	GLboolean ARB_point_parameters;
+	GLboolean ARB_point_sprite;
+	GLboolean ARB_shadow;
+	GLboolean ARB_shadow_ambient;
+	GLboolean ARB_texture_border_clamp; /* or SGIS_texture_border_clamp */
+	GLboolean ARB_texture_compression;
+	GLboolean ARB_texture_cube_map; /* or EXT_texture_cube_map */
+	GLboolean ARB_texture_env_add; /* standard in OpenGL 1.3 */
+	GLboolean ARB_texture_env_combine; /* standard in OpenGL 1.3 */
+	GLboolean ARB_texture_env_crossbar; /* standard in OpenGL 1.4 */
+	GLboolean ARB_texture_env_dot3; /* standard in OpenGL 1.3 */
+	GLboolean ARB_texture_mirrored_repeat;
+	GLboolean ARB_texture_non_power_of_two; /* standard in 1.5 */
+	GLboolean ARB_transpose_matrix;
+	GLboolean ARB_vertex_buffer_object;
+    GLboolean ARB_pixel_buffer_object;
+	GLboolean ARB_vertex_program;
+	GLboolean ARB_window_pos;
+	GLboolean EXT_blend_color;
+	GLboolean EXT_blend_logic_op;
+	GLboolean EXT_blend_func_separate;
+	GLboolean EXT_blend_minmax;
+	GLboolean EXT_blend_subtract;
+	GLboolean EXT_clip_volume_hint;
+	GLboolean EXT_fog_coord;
+	GLboolean EXT_multi_draw_arrays;
+	GLboolean EXT_secondary_color;
+	GLboolean EXT_separate_specular_color;
+	GLboolean EXT_shadow_funcs;
+	GLboolean EXT_stencil_wrap;
+	GLboolean EXT_texture_edge_clamp; /* or SGIS_texture_edge_clamp */
+	GLboolean EXT_texture_filter_anisotropic;
+	GLboolean EXT_texture_lod_bias;
+	GLboolean EXT_texture3D;
+	GLboolean IBM_rasterpos_clip;
+	GLboolean NV_fog_distance;
+	GLboolean NV_fragment_program;
+	GLboolean NV_register_combiners;
+	GLboolean NV_register_combiners2;
+	GLboolean NV_texgen_reflection;
+	GLboolean NV_texture_rectangle;
+	GLboolean NV_vertex_program;
+	GLboolean NV_vertex_program1_1;
+	GLboolean NV_vertex_program2;
+	GLboolean SGIS_generate_mipmap;
+    GLboolean EXT_texture_from_pixmap;
+	GLboolean ATI_texture_mirror_once;
+
+	/* derived from above */
+	GLboolean any_vertex_program;    /* NV or ARB */
+	GLboolean any_fragment_program;  /* NV or ARB */
+	GLboolean any_program;  /* vertex or fragment */
+} CRExtensionState;
+
+extern DECLEXPORT(void) crStateLimitsInit(CRLimitsState *limits);
+extern DECLEXPORT(void) crStateLimitsDestroy(CRLimitsState *limits);
+
+extern DECLEXPORT(void) crStateLimitsPrint(const CRLimitsState *limits);
+
+extern DECLEXPORT(void) crStateComputeVersion(uint32_t *puMajorMin, uint32_t *puMinorMin);
+
+extern DECLEXPORT(GLubyte *) crStateMergeExtensions(GLuint n, const GLubyte **extensions);
+
+extern DECLEXPORT(void) crStateExtensionsInit( CRLimitsState *limits, CRExtensionState *extensions );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_FOG_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_line.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_line.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_line.h	(revision 86648)
@@ -0,0 +1,44 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_LINE_H
+#define CR_STATE_LINE_H
+
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue enable[CR_MAX_BITARRAY];
+	CRbitvalue width[CR_MAX_BITARRAY];
+	CRbitvalue stipple[CR_MAX_BITARRAY];
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+} CRLineBits;
+
+typedef struct {
+	GLboolean	lineSmooth;
+	GLboolean	lineStipple;
+	GLfloat		width;
+	GLushort	pattern;
+	GLint		repeat;
+} CRLineState;
+
+DECLEXPORT(void) crStateLineInit (CRContext *ctx);
+
+DECLEXPORT(void) crStateLineDiff(CRLineBits *bb, CRbitvalue *bitID,
+                                 CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateLineSwitch(CRLineBits *bb, CRbitvalue *bitID, 
+                                   CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_LINE_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_lists.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_lists.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_lists.h	(revision 86648)
@@ -0,0 +1,45 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_LISTS_H
+#define CR_STATE_LISTS_H
+
+#include "cr_hash.h"
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+	CRbitvalue base[CR_MAX_BITARRAY];
+} CRListsBits;
+
+typedef struct {
+	GLboolean newEnd;
+	GLuint base;          /* set by glListBase */
+	GLuint currentIndex;  /* list currently being built (or zero) */
+	GLenum mode;          /* GL_COMPILE, GL_COMPILE_AND_EXECUTE or zero */
+} CRListsState;
+
+
+DECLEXPORT(void) crStateListsInit(CRContext *ctx);
+DECLEXPORT(void) crStateListsDestroy(CRContext *ctx);
+
+DECLEXPORT(void) crStateListsDiff(CRListsBits *bb, CRbitvalue *bitID,
+                                  CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateListsSwitch(CRListsBits *bb, CRbitvalue *bitID, 
+                                    CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_multisample.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_multisample.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_multisample.h	(revision 86648)
@@ -0,0 +1,47 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_MULTISAMPLE_H
+#define CR_STATE_MULTISAMPLE_H
+
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue	dirty[CR_MAX_BITARRAY];
+	CRbitvalue	enable[CR_MAX_BITARRAY];
+	CRbitvalue  sampleAlphaToCoverage[CR_MAX_BITARRAY];
+	CRbitvalue  sampleAlphaToOne[CR_MAX_BITARRAY];
+	CRbitvalue  sampleCoverage[CR_MAX_BITARRAY];
+	CRbitvalue  sampleCoverageValue[CR_MAX_BITARRAY]; /* and invert */
+} CRMultisampleBits;
+
+typedef struct {
+	GLboolean enabled;
+	GLboolean sampleAlphaToCoverage;
+	GLboolean sampleAlphaToOne;
+	GLboolean sampleCoverage;
+	GLfloat sampleCoverageValue;
+	GLboolean sampleCoverageInvert;
+} CRMultisampleState;
+
+DECLEXPORT(void) crStateMultisampleInit(CRContext *ctx);
+
+DECLEXPORT(void) crStateMultisampleDiff(CRMultisampleBits *bb, CRbitvalue *bitID,
+                                        CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateMultisampleSwitch(CRMultisampleBits *bb, CRbitvalue *bitID, 
+                                          CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_MULTISAMPLE_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_occlude.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_occlude.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_occlude.h	(revision 86648)
@@ -0,0 +1,58 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_OCCLUSION_H
+#define CR_OCCLUSION_H
+
+#include "cr_hash.h"
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue	dirty[CR_MAX_BITARRAY];
+} CROcclusionBits;
+
+
+/*
+ * Occlusion query object.
+ */
+typedef struct {
+	GLenum target;
+	GLuint name;
+	GLuint refCount;
+	GLuint passedCounter;
+	GLboolean active;
+	CRbitvalue dirty[CR_MAX_BITARRAY];  /* dirty data or state */
+	GLintptrARB dirtyStart, dirtyLength; /* dirty region */
+} CROcclusionObject;
+
+
+typedef struct {
+	CRHashTable *objects;
+	GLuint currentQueryObject;
+} CROcclusionState;
+
+
+DECLEXPORT(void) crStateOcclusionInit(CRContext *ctx);
+
+DECLEXPORT(void) crStateOcclusionDestroy(CRContext *ctx);
+
+DECLEXPORT(void) crStateOcclusionDiff(CROcclusionBits *bb, CRbitvalue *bitID,
+                                      CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateOcclusionSwitch(CROcclusionBits *bb, CRbitvalue *bitID, 
+                                        CRContext *fromCtx, CRContext *toCtx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_OCCLUSION_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_pixel.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_pixel.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_pixel.h	(revision 86648)
@@ -0,0 +1,74 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_PIXEL_H
+#define CR_STATE_PIXEL_H
+
+#include "state/cr_statetypes.h"
+#include "state/cr_limits.h"
+#include "cr_bits.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+	CRbitvalue transfer[CR_MAX_BITARRAY];
+	CRbitvalue zoom[CR_MAX_BITARRAY];
+	CRbitvalue maps[CR_MAX_BITARRAY];
+} CRPixelBits;
+
+typedef struct {
+	GLboolean	mapColor;
+	GLboolean	mapStencil;
+	GLint			indexShift;
+	GLint			indexOffset;
+	GLcolorf	scale;
+	GLfloat		depthScale;
+	GLcolorf	bias;
+	GLfloat		depthBias;
+	GLfloat		xZoom;
+	GLfloat		yZoom;
+
+	GLint			mapItoI[CR_MAX_PIXEL_MAP_TABLE];
+	GLint			mapStoS[CR_MAX_PIXEL_MAP_TABLE];
+	GLfloat		mapItoR[CR_MAX_PIXEL_MAP_TABLE];
+	GLfloat		mapItoG[CR_MAX_PIXEL_MAP_TABLE];
+	GLfloat		mapItoB[CR_MAX_PIXEL_MAP_TABLE];
+	GLfloat		mapItoA[CR_MAX_PIXEL_MAP_TABLE];
+	GLfloat		mapRtoR[CR_MAX_PIXEL_MAP_TABLE];
+	GLfloat		mapGtoG[CR_MAX_PIXEL_MAP_TABLE];
+	GLfloat		mapBtoB[CR_MAX_PIXEL_MAP_TABLE];
+	GLfloat		mapAtoA[CR_MAX_PIXEL_MAP_TABLE];
+
+	GLint		mapItoIsize;
+	GLint		mapStoSsize;
+	GLint		mapItoRsize;
+	GLint		mapItoGsize;
+	GLint		mapItoBsize;
+	GLint		mapItoAsize;
+	GLint		mapRtoRsize;
+	GLint		mapGtoGsize;
+	GLint		mapBtoBsize;
+	GLint		mapAtoAsize;
+} CRPixelState;
+
+DECLEXPORT(void) crStatePixelInit( CRContext *ctx );
+
+DECLEXPORT(void) crStatePixelDiff(CRPixelBits *bb, CRbitvalue *bitID,
+                                  CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStatePixelSwitch(CRPixelBits *bb, CRbitvalue *bitID, 
+                                    CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* CR_STATE_PIXEL_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_point.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_point.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_point.h	(revision 86648)
@@ -0,0 +1,62 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_POINT_H
+#define CR_STATE_POINT_H
+
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue enableSmooth[CR_MAX_BITARRAY];
+	CRbitvalue size[CR_MAX_BITARRAY];
+#ifdef CR_ARB_point_parameters
+	CRbitvalue minSize[CR_MAX_BITARRAY];
+	CRbitvalue maxSize[CR_MAX_BITARRAY];
+	CRbitvalue fadeThresholdSize[CR_MAX_BITARRAY];
+	CRbitvalue distanceAttenuation[CR_MAX_BITARRAY];
+#endif
+#ifdef CR_ARB_point_sprite
+	CRbitvalue enableSprite[CR_MAX_BITARRAY];
+	CRbitvalue coordReplacement[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
+#endif
+	CRbitvalue spriteCoordOrigin[CR_MAX_BITARRAY];
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+} CRPointBits;
+
+typedef struct {
+	GLboolean	pointSmooth;
+	GLfloat		pointSize;
+#ifdef CR_ARB_point_parameters
+	GLfloat		minSize, maxSize;
+	GLfloat		fadeThresholdSize;
+	GLfloat		distanceAttenuation[3];
+#endif
+#ifdef CR_ARB_point_sprite
+	GLboolean pointSprite;
+	GLboolean coordReplacement[CR_MAX_TEXTURE_UNITS];
+#endif
+    GLfloat spriteCoordOrigin;
+    GLfloat reserved; /* added to make sure alignment of sttructures following CRPointState in CRContext does not change */
+} CRPointState;
+
+DECLEXPORT(void) crStatePointInit (CRContext *ctx);
+
+DECLEXPORT(void) crStatePointDiff(CRPointBits *bb, CRbitvalue *bitID,
+                                  CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStatePointSwitch(CRPointBits *bb, CRbitvalue *bitID, 
+                                    CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_POINT_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_polygon.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_polygon.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_polygon.h	(revision 86648)
@@ -0,0 +1,53 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_POLYGON_H
+#define CR_STATE_POLYGON_H
+
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue enable[CR_MAX_BITARRAY];
+	CRbitvalue offset[CR_MAX_BITARRAY];
+	CRbitvalue mode[CR_MAX_BITARRAY];
+	CRbitvalue stipple[CR_MAX_BITARRAY];
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+} CRPolygonBits;
+
+typedef struct {
+	GLboolean	polygonSmooth;
+	GLboolean polygonOffsetFill;
+	GLboolean polygonOffsetLine;
+	GLboolean polygonOffsetPoint;
+	GLboolean	polygonStipple;
+	GLboolean cullFace;
+	GLfloat		offsetFactor;
+	GLfloat		offsetUnits;
+	GLenum		cullFaceMode;
+	GLenum		frontFace;
+	GLenum		frontMode;
+	GLenum		backMode;
+	GLint		  stipple[32];
+} CRPolygonState;
+
+DECLEXPORT(void) crStatePolygonInit(CRContext *ctx);
+
+DECLEXPORT(void) crStatePolygonDiff(CRPolygonBits *bb, CRbitvalue *bitID,
+                                    CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStatePolygonSwitch(CRPolygonBits *bb, CRbitvalue *bitID, 
+                                      CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_program.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_program.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_program.h	(revision 86648)
@@ -0,0 +1,142 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_PROGRAM_H
+#define CR_STATE_PROGRAM_H
+
+#include "cr_hash.h"
+#include "state/cr_statetypes.h"
+#include "state/cr_limits.h"
+
+#include <iprt/cdefs.h>
+
+/*
+ * Dirty bits for per-context program state.  Per-program dirty bits
+ * are in the CRProgram structure.
+ */
+typedef struct {
+    CRbitvalue dirty[CR_MAX_BITARRAY];
+    CRbitvalue vpEnable[CR_MAX_BITARRAY];
+    CRbitvalue fpEnable[CR_MAX_BITARRAY];
+    CRbitvalue vpBinding[CR_MAX_BITARRAY];
+    CRbitvalue fpBinding[CR_MAX_BITARRAY];
+    CRbitvalue vertexAttribArrayEnable[CR_MAX_VERTEX_ATTRIBS][CR_MAX_BITARRAY];
+    CRbitvalue map1AttribArrayEnable[CR_MAX_VERTEX_ATTRIBS][CR_MAX_BITARRAY];
+    CRbitvalue map2AttribArrayEnable[CR_MAX_VERTEX_ATTRIBS][CR_MAX_BITARRAY];
+    /* per-param flags: */
+    CRbitvalue vertexEnvParameter[CR_MAX_VERTEX_PROGRAM_ENV_PARAMS][CR_MAX_BITARRAY];
+    CRbitvalue fragmentEnvParameter[CR_MAX_FRAGMENT_PROGRAM_ENV_PARAMS][CR_MAX_BITARRAY];
+    /* any param flags: */
+    CRbitvalue vertexEnvParameters[CR_MAX_BITARRAY];
+    CRbitvalue fragmentEnvParameters[CR_MAX_BITARRAY];
+    CRbitvalue trackMatrix[CR_MAX_VERTEX_PROGRAM_ENV_PARAMS / 4][CR_MAX_BITARRAY];
+} CRProgramBits;
+
+
+/*
+ * Fragment programs have named symbols which are defined/declared
+ * within the fragment program that can also be set with the
+ * glProgramNamedParameter4*NV() functions.
+ * We keep a linked list of these CRProgramSymbol structures to implement
+ * a symbol table.  A simple linked list is sufficient since a fragment
+ * program typically has just a few symbols.
+ */
+typedef struct CRProgramSymbol {
+    const char *name;
+    GLuint     cbName;
+    GLfloat value[4];
+    CRbitvalue dirty[CR_MAX_BITARRAY];
+    struct CRProgramSymbol *next;
+} CRProgramSymbol;
+
+
+/*
+ * A vertex or fragment program.
+ */
+typedef struct {
+    GLenum target;
+    GLuint id;
+    GLboolean isARBprogram;  /* to distinguish between NV and ARB programs */
+    const GLubyte *string;
+    GLsizei length;
+    GLboolean resident;
+    GLenum format;
+
+    /* Set with ProgramNamedParameterNV */
+    struct CRProgramSymbol *symbolTable;
+
+    /* Set with ProgramLocalParameterARB: */
+    GLfloat parameters[CR_MAX_PROGRAM_LOCAL_PARAMS][4];
+
+    /* ARB info (this could be impossible to implement without parsing */
+    GLint numInstructions;
+    GLint numTemporaries;
+    GLint numParameters;
+    GLint numAttributes;
+    GLint numAddressRegs;
+    GLint numAluInstructions;
+    GLint numTexInstructions;
+    GLint numTexIndirections;
+
+    CRbitvalue dirtyNamedParams[CR_MAX_BITARRAY];
+    CRbitvalue dirtyParam[CR_MAX_PROGRAM_LOCAL_PARAMS][CR_MAX_BITARRAY];
+    CRbitvalue dirtyParams[CR_MAX_BITARRAY];
+    CRbitvalue dirtyProgram[CR_MAX_BITARRAY];
+} CRProgram;
+
+
+
+typedef struct {
+    CRProgram *currentVertexProgram;
+    CRProgram *currentFragmentProgram;
+    GLint errorPos;
+    const GLubyte *errorString;
+    GLboolean loadedProgram;    /* XXX temporary */
+
+    CRProgram *defaultVertexProgram;
+    CRProgram *defaultFragmentProgram;
+
+    /* tracking matrices for vertex programs */
+#ifdef VBOX /* see state_program.c */
+    GLenum TrackMatrix[CR_MAX_VERTEX_PROGRAM_ENV_PARAMS / 4];
+    GLenum TrackMatrixTransform[CR_MAX_VERTEX_PROGRAM_ENV_PARAMS / 4];
+#else
+    GLenum TrackMatrix[CR_MAX_VERTEX_PROGRAM_LOCAL_PARAMS / 4];
+    GLenum TrackMatrixTransform[CR_MAX_VERTEX_PROGRAM_LOCAL_PARAMS / 4];
+#endif
+
+    /* global/env params shared by all programs */
+    GLfloat fragmentParameters[CR_MAX_FRAGMENT_PROGRAM_ENV_PARAMS][4];
+    GLfloat vertexParameters[CR_MAX_VERTEX_PROGRAM_ENV_PARAMS][4];
+
+    CRHashTable *programHash;  /* XXX belongs in shared state, actually */
+
+    GLuint vpProgramBinding;
+    GLuint fpProgramBinding;
+    GLboolean vpEnabled;    /* GL_VERTEX_PROGRAM_NV / ARB*/
+    GLboolean fpEnabled;    /* GL_FRAGMENT_PROGRAM_NV */
+    GLboolean fpEnabledARB; /* GL_FRAGMENT_PROGRAM_ARB */
+    GLboolean vpPointSize;  /* GL_VERTEX_PROGRAM_NV */
+    GLboolean vpTwoSide;    /* GL_VERTEX_PROGRAM_NV */
+
+    /* Indicates that we have to resend program data to GPU on first glMakeCurrent call with owning context */
+    GLboolean   bResyncNeeded;
+
+} CRProgramState;
+
+
+
+extern DECLEXPORT(void) crStateProgramInit(CRContext *ctx);
+extern DECLEXPORT(void) crStateProgramDestroy(CRContext *ctx);
+
+extern DECLEXPORT(void) crStateProgramDiff(CRProgramBits *b, CRbitvalue *bitID,
+                                           CRContext *fromCtx, CRContext *toCtx);
+extern DECLEXPORT(void) crStateProgramSwitch(CRProgramBits *b, CRbitvalue *bitID,
+                                             CRContext *fromCtx, CRContext *toCtx);
+
+DECLEXPORT(void) crStateDiffAllPrograms(CRContext *g, CRbitvalue *bitID, GLboolean bForceUpdate);
+
+#endif /* CR_STATE_PROGRAM_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_regcombiner.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_regcombiner.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_regcombiner.h	(revision 86648)
@@ -0,0 +1,71 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_REGCOMBINER_H
+#define CR_STATE_REGCOMBINER_H
+
+#include "state/cr_statetypes.h"
+#include "state/cr_limits.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	GLenum a,        b,        c,        d;
+	GLenum aMapping, bMapping, cMapping, dMapping;
+	GLenum aPortion, bPortion, cPortion, dPortion;
+	GLenum scale, bias;
+	GLenum    abOutput,     cdOutput,     sumOutput;
+	GLboolean abDotProduct, cdDotProduct, muxSum;
+} CRRegCombinerPortionState;
+
+typedef struct {
+	GLboolean enabledRegCombiners;
+	GLboolean enabledPerStageConstants;
+
+	GLcolorf constantColor0;
+	GLcolorf constantColor1;
+	GLcolorf stageConstantColor0[CR_MAX_GENERAL_COMBINERS];
+	GLcolorf stageConstantColor1[CR_MAX_GENERAL_COMBINERS];
+	GLboolean colorSumClamp;
+	GLint numGeneralCombiners;
+
+	CRRegCombinerPortionState rgb[CR_MAX_GENERAL_COMBINERS];
+	CRRegCombinerPortionState alpha[CR_MAX_GENERAL_COMBINERS];
+
+	GLenum a,        b,        c,        d,        e,        f,        g;
+	GLenum aMapping, bMapping, cMapping, dMapping, eMapping, fMapping, gMapping;
+	GLenum aPortion, bPortion, cPortion, dPortion, ePortion, fPortion, gPortion;
+} CRRegCombinerState;
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+	CRbitvalue enable[CR_MAX_BITARRAY];
+	CRbitvalue regCombinerVars[CR_MAX_BITARRAY]; /* numGeneralCombiners, colorSumClamp */
+	CRbitvalue regCombinerColor0[CR_MAX_BITARRAY];
+	CRbitvalue regCombinerColor1[CR_MAX_BITARRAY];
+	CRbitvalue regCombinerStageColor0[CR_MAX_GENERAL_COMBINERS][CR_MAX_BITARRAY];
+	CRbitvalue regCombinerStageColor1[CR_MAX_GENERAL_COMBINERS][CR_MAX_BITARRAY];
+	CRbitvalue regCombinerInput[CR_MAX_GENERAL_COMBINERS][CR_MAX_BITARRAY]; /* rgb/alpha[].a/b/c/d, .aMapping, .aPortion */
+	CRbitvalue regCombinerOutput[CR_MAX_GENERAL_COMBINERS][CR_MAX_BITARRAY]; /* rgb/alpha[].abOutput, .cdOutput, .sumOutput, .scale, .bias, .abDotProduct, .cdDotProduct, .muxSum */
+	CRbitvalue regCombinerFinalInput[CR_MAX_BITARRAY]; /* a/b/c/d/e/f/g, aMapping, aPortion */
+} CRRegCombinerBits;
+
+DECLEXPORT(void) crStateRegCombinerInit( CRContext *ctx );
+
+DECLEXPORT(void) crStateRegCombinerDiff(CRRegCombinerBits *b, CRbitvalue *bitID,
+                                        CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateRegCombinerSwitch( CRRegCombinerBits *b, CRbitvalue *bitID, 
+                                           CRContext *fromCtx, CRContext *toCtx );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_REGCOMBINER_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_stateerror.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_stateerror.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_stateerror.h	(revision 86648)
@@ -0,0 +1,16 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_ERROR_H
+#define CR_STATE_ERROR_H
+
+#include "chromium.h"
+
+#include <iprt/cdefs.h>
+
+DECLEXPORT(void) crStateError(PCRStateTracker pState, int line, const char *file, GLenum err, const char *format, ... );
+
+#endif /* CR_STATE_ERROR_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_statetypes.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_statetypes.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_statetypes.h	(revision 86648)
@@ -0,0 +1,211 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_TYPES_H
+#define CR_STATE_TYPES_H
+
+#include "chromium.h"
+#include "cr_bits.h"
+#include "cr_matrix.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct CRStateTracker *PCRStateTracker;
+
+typedef GLfloat GLdefault;
+#define CR_DEFAULTTYPE_FLOAT
+
+#define CR_MAXBYTE		((GLbyte) 0x7F)
+#define CR_MAXUBYTE		((GLubyte) 0xFF)
+#define CR_MAXSHORT		((GLshort) 0x7FFF)
+#define CR_MAXUSHORT	((GLushort) 0xFFFF)
+#define CR_MAXINT			((GLint) 0x7FFFFFFF)
+#define CR_MAXUINT		((GLuint) 0xFFFFFFFF)
+#define CR_MAXFLOAT		1.0f
+#define CR_MAXDOUBLE	1.0
+
+#define CRBITS_LENGTH 32
+#define CRBITS_ONES 0xFFFFFFFF
+typedef unsigned int CRbitvalue;
+
+typedef struct {
+	GLfloat x1, x2, y1, y2;
+} CRrectf;
+
+typedef struct {
+	GLint x1, y1, x2, y2;
+} CRrecti;
+
+#define VECTOR(type, name) typedef struct { type x,y,z,w; } name
+#define COLOR(type, name) typedef struct { type r,g,b,a; } name
+#define TEXCOORD(type, name) typedef struct { type s,t,r,q; } name
+
+VECTOR(GLdefault,GLvector);
+VECTOR(GLenum,GLvectore);
+VECTOR(GLubyte,GLvectorub);
+VECTOR(GLbyte,GLvectorb);
+VECTOR(GLushort,GLvectorus);
+VECTOR(GLshort,GLvectors);
+VECTOR(GLint,GLvectori);
+VECTOR(GLuint,GLvectorui);
+/* These two are defined in cr_matrix.h */
+/* VECTOR(GLfloat,GLvectorf); */
+/* VECTOR(GLdouble,GLvectord); */
+COLOR(GLdefault,GLcolor);
+COLOR(GLenum,GLcolore);
+COLOR(GLubyte,GLcolorub);
+COLOR(GLbyte,GLcolorb);
+COLOR(GLushort,GLcolorus);
+COLOR(GLshort,GLcolors);
+COLOR(GLint,GLcolori);
+COLOR(GLuint,GLcolorui);
+COLOR(GLfloat,GLcolorf);
+COLOR(GLdouble,GLcolord);
+TEXCOORD(GLdefault,GLtexcoord);
+TEXCOORD(GLenum,GLtexcoorde);
+TEXCOORD(GLubyte,GLtexcoordub);
+TEXCOORD(GLbyte,GLtexcoordb);
+TEXCOORD(GLushort,GLtexcoordus);
+TEXCOORD(GLshort,GLtexcoords);
+TEXCOORD(GLint,GLtexcoordi);
+TEXCOORD(GLuint,GLtexcoordui);
+TEXCOORD(GLfloat,GLtexcoordf);
+TEXCOORD(GLdouble,GLtexcoordd);
+
+#undef VECTOR
+#undef COLOR
+#undef TEXCOORD
+
+#define COMPARE_VECTOR(a,b)		((a)[0] != (b)[0] || (a)[1] != (b)[1] || (a)[2] != (b)[2] || (a)[3] != (b)[3])
+#define COMPARE_TEXCOORD(a,b)	((a)[0] != (b)[0] || (a)[1] != (b)[1] || (a)[2] != (b)[2] || (a)[3] != (b)[3])
+#define COMPARE_COLOR(x,y)		((x)[0] != (y)[0] || (x)[1] != (y)[1] || (x)[2] != (y)[2] || (x)[3] != (y)[3])
+
+/* Assign scalers to short vectors: */
+#define ASSIGN_2V( V, V0, V1 )	\
+do { 				\
+    (V)[0] = V0; 			\
+    (V)[1] = V1; 			\
+} while(0)
+
+#define ASSIGN_3V( V, V0, V1, V2 )	\
+do { 				 	\
+    (V)[0] = V0; 				\
+    (V)[1] = V1; 				\
+    (V)[2] = V2; 				\
+} while(0)
+
+#define ASSIGN_4V( V, V0, V1, V2, V3 ) 		\
+do { 						\
+    (V)[0] = V0;					\
+    (V)[1] = V1;					\
+    (V)[2] = V2;					\
+    (V)[3] = V3; 					\
+} while(0)
+
+
+/* Copy short vectors: */
+#define COPY_2V( DST, SRC )			\
+do {						\
+   (DST)[0] = (SRC)[0];				\
+   (DST)[1] = (SRC)[1];				\
+} while (0)
+
+#define COPY_3V( DST, SRC )			\
+do {						\
+   (DST)[0] = (SRC)[0];				\
+   (DST)[1] = (SRC)[1];				\
+   (DST)[2] = (SRC)[2];				\
+} while (0)
+
+#define COPY_4V( DST, SRC )			\
+do {						\
+   (DST)[0] = (SRC)[0];				\
+   (DST)[1] = (SRC)[1];				\
+   (DST)[2] = (SRC)[2];				\
+   (DST)[3] = (SRC)[3];				\
+} while (0)
+
+#define COPY_2V_CAST( DST, SRC, CAST )		\
+do {						\
+   (DST)[0] = (CAST)(SRC)[0];			\
+   (DST)[1] = (CAST)(SRC)[1];			\
+} while (0)
+
+#define COPY_3V_CAST( DST, SRC, CAST )		\
+do {						\
+   (DST)[0] = (CAST)(SRC)[0];			\
+   (DST)[1] = (CAST)(SRC)[1];			\
+   (DST)[2] = (CAST)(SRC)[2];			\
+} while (0)
+
+#define COPY_4V_CAST( DST, SRC, CAST )		\
+do {						\
+   (DST)[0] = (CAST)(SRC)[0];			\
+   (DST)[1] = (CAST)(SRC)[1];			\
+   (DST)[2] = (CAST)(SRC)[2];			\
+   (DST)[3] = (CAST)(SRC)[3];			\
+} while (0)
+
+#if defined(__i386__)
+#define COPY_4UBV(DST, SRC)			\
+do {						\
+   *((GLuint*)(DST)) = *((GLuint*)(SRC));	\
+} while (0)
+#else
+/* The GLuint cast might fail if DST or SRC are not dword-aligned (RISC) */
+#define COPY_4UBV(DST, SRC)			\
+do {						\
+   (DST)[0] = (SRC)[0];				\
+   (DST)[1] = (SRC)[1];				\
+   (DST)[2] = (SRC)[2];				\
+   (DST)[3] = (SRC)[3];				\
+} while (0)
+#endif
+
+#define COPY_2FV( DST, SRC )			\
+do {						\
+   const GLfloat *_tmp = (SRC);			\
+   (DST)[0] = _tmp[0];				\
+   (DST)[1] = _tmp[1];				\
+} while (0)
+
+#define COPY_3FV( DST, SRC )			\
+do {						\
+   const GLfloat *_tmp = (SRC);			\
+   (DST)[0] = _tmp[0];				\
+   (DST)[1] = _tmp[1];				\
+   (DST)[2] = _tmp[2];				\
+} while (0)
+
+#define COPY_4FV( DST, SRC )			\
+do {						\
+   const GLfloat *_tmp = (SRC);			\
+   (DST)[0] = _tmp[0];				\
+   (DST)[1] = _tmp[1];				\
+   (DST)[2] = _tmp[2];				\
+   (DST)[3] = _tmp[3];				\
+} while (0)
+
+
+
+#define COPY_SZ_4V(DST, SZ, SRC) 		\
+do {						\
+   switch (SZ) {				\
+   case 4: (DST)[3] = (SRC)[3];			\
+   case 3: (DST)[2] = (SRC)[2];			\
+   case 2: (DST)[1] = (SRC)[1];			\
+   case 1: (DST)[0] = (SRC)[0];			\
+   }  						\
+} while(0)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_TYPES_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_stencil.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_stencil.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_stencil.h	(revision 86648)
@@ -0,0 +1,107 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_STENCIL_H
+#define CR_STATE_STENCIL_H
+
+#include "cr_glstate.h"
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+#include <iprt/assert.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CRSTATE_STENCIL_BUFFER_ID_FRONT         0
+#define CRSTATE_STENCIL_BUFFER_ID_BACK          1
+#define CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK 2
+#define CRSTATE_STENCIL_BUFFER_COUNT            3
+
+/* stencil buffer settings were accessed with StencilXxx with ActiveStencilFaceEXT == GL_FRONT or StencilXxxSeparate(GL_FRONT_AND_BACK) */
+#define CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK     0
+/* stencil buffer settings were accessed with StencilXxxSeparate(GL_FRONT_FRONT) */
+#define CRSTATE_STENCIL_BUFFER_REF_ID_FRONT              1
+/* stencil buffer settings were accessed with StencilXxxSeparate(GL_FRONT_BACK) */
+#define CRSTATE_STENCIL_BUFFER_REF_ID_BACK               2
+/* stencil buffer settings were accessed with StencilXxx with ActiveStencilFaceEXT == GL_BACK */
+#define CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK      3
+#define CRSTATE_STENCIL_BUFFER_REF_COUNT                 4
+
+typedef struct {
+    CRbitvalue dirty[CR_MAX_BITARRAY];
+    CRbitvalue enable[CR_MAX_BITARRAY];
+    CRbitvalue func[CR_MAX_BITARRAY];
+    CRbitvalue op[CR_MAX_BITARRAY];
+    CRbitvalue clearValue[CR_MAX_BITARRAY];
+    CRbitvalue writeMask[CR_MAX_BITARRAY];
+} CRStencilBits_v_33;
+
+typedef struct {
+    CRbitvalue func[CR_MAX_BITARRAY];
+    CRbitvalue op[CR_MAX_BITARRAY];
+} CRStencilBufferRefBits;
+
+typedef struct {
+    CRbitvalue dirty[CR_MAX_BITARRAY];
+    CRbitvalue enable[CR_MAX_BITARRAY];
+    CRbitvalue enableTwoSideEXT[CR_MAX_BITARRAY];
+    CRbitvalue activeStencilFace[CR_MAX_BITARRAY];
+    CRbitvalue clearValue[CR_MAX_BITARRAY];
+    CRbitvalue writeMask[CR_MAX_BITARRAY];
+    /* note: here we use _BUFFER_REF_ rather than _REF_ because we track the way buffers are accessed here,
+     * to ensure the correct function is called on hw->chromium state restoration,
+     * i.e. we want to avoid always calling StencilXxxSeparate, but call StencilXxx when it was actually called */
+    CRStencilBufferRefBits bufferRefs[CRSTATE_STENCIL_BUFFER_REF_COUNT];
+} CRStencilBits;
+
+typedef struct {
+    GLboolean   stencilTest;
+    GLenum      func;
+    GLint       mask;
+    GLint       ref;
+    GLenum      fail;
+    GLenum      passDepthFail;
+    GLenum      passDepthPass;
+    GLint       clearValue;
+    GLint       writeMask;
+} CRStencilState_v_33;
+
+typedef struct {
+    GLenum      func;
+    GLint       mask;
+    GLint       ref;
+    GLenum      fail;
+    GLenum      passDepthFail;
+    GLenum      passDepthPass;
+} CRStencilBufferState;
+
+typedef struct {
+    /* true if stencil test is enabled */
+	GLboolean	stencilTest;
+	/* true if GL_EXT_stencil_two_side is enabled (glEnable(GL_STENCIL_TEST_TWO_SIDE_EXT)) */
+	GLboolean   stencilTwoSideEXT;
+	/* GL_FRONT or GL_BACK */
+    GLenum      activeStencilFace;
+    GLint       clearValue;
+    GLint       writeMask;
+	CRStencilBufferState buffers[CRSTATE_STENCIL_BUFFER_COUNT];
+} CRStencilState;
+
+DECLEXPORT(void) crStateStencilInit(CRContext *ctx);
+DECLEXPORT(void) crStateStencilBufferInit(CRStencilBufferState *s);
+
+DECLEXPORT(void) crStateStencilDiff(CRStencilBits *bb, CRbitvalue *bitID,
+                                    CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateStencilSwitch(CRStencilBits *bb, CRbitvalue *bitID, 
+                                      CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_STENCIL_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_texture.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_texture.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_texture.h	(revision 86648)
@@ -0,0 +1,250 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_TEXTURE_H
+#define CR_STATE_TEXTURE_H
+
+#include "cr_hash.h"
+#include "state/cr_statetypes.h"
+#include "state/cr_limits.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Tells state tracker to rely on diff_api to store/load texture images
+ * and avoid host memory allocation.
+ */
+#define CR_STATE_NO_TEXTURE_IMAGE_STORE
+
+#if defined(CR_ARB_pixel_buffer_object) && !defined(CR_STATE_NO_TEXTURE_IMAGE_STORE)
+#error CR_ARB_pixel_buffer_object not supported without CR_STATE_NO_TEXTURE_IMAGE_STORE
+#endif
+
+#define CR_MAX_MIPMAP_LEVELS 20
+
+typedef struct {
+    GLubyte redbits;
+    GLubyte greenbits;
+    GLubyte bluebits;
+    GLubyte alphabits;
+    GLubyte luminancebits;
+    GLubyte intensitybits;
+    GLubyte indexbits;
+} CRTextureFormat;
+
+typedef struct {
+    GLubyte *img;
+    int bytes;
+    GLint width;  /* width, height, depth includes the border */
+    GLint height;
+    GLint depth;
+    GLint internalFormat;
+    GLint border;
+    GLenum format;
+    GLenum type;
+    int bytesPerPixel;
+#if CR_ARB_texture_compression
+    GLboolean compressed;
+#endif
+    GLboolean generateMipmap;
+    const CRTextureFormat *texFormat;
+
+    CRbitvalue dirty[CR_MAX_BITARRAY];
+} CRTextureLevel;
+
+typedef struct {
+    GLenum                 target;
+    GLuint                 id;
+    GLuint                 hwid;
+
+    /* The mipmap levels */
+    CRTextureLevel        *level[6];  /* 6 cube faces */
+
+    GLcolorf               borderColor;
+    GLenum                 minFilter, magFilter;
+    GLenum                 wrapS, wrapT;
+#ifdef CR_OPENGL_VERSION_1_2
+    GLenum                 wrapR;
+    GLfloat                priority;
+    GLfloat                minLod;
+    GLfloat                maxLod;
+    GLint                  baseLevel;
+    GLint                  maxLevel;
+#endif
+#ifdef CR_EXT_texture_filter_anisotropic
+    GLfloat                maxAnisotropy;
+#endif
+#ifdef CR_ARB_depth_texture
+    GLenum                 depthMode;
+#endif
+#ifdef CR_ARB_shadow
+    GLenum                 compareMode;
+    GLenum                 compareFunc;
+#endif
+#ifdef CR_ARB_shadow_ambient
+    GLfloat                compareFailValue;
+#endif
+#ifdef CR_SGIS_generate_mipmap
+    GLboolean              generateMipmap;
+#endif
+    GLboolean              pinned; /* <- keep the texture alive if its ctxUsage reaches zero */
+    CRbitvalue             dirty[CR_MAX_BITARRAY];
+    CRbitvalue             imageBit[CR_MAX_BITARRAY];
+    CRbitvalue             paramsBit[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
+    /* bitfield representing the object usage. 1 means the object is used by the context with the given bitid */
+    CRbitvalue             ctxUsage[CR_MAX_BITARRAY];
+} CRTextureObj;
+
+typedef struct {
+    CRbitvalue dirty[CR_MAX_BITARRAY];
+    CRbitvalue enable[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
+    CRbitvalue current[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
+    CRbitvalue objGen[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
+    CRbitvalue eyeGen[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
+    CRbitvalue genMode[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
+    /* XXX someday create more bits for texture env state */
+    CRbitvalue envBit[CR_MAX_TEXTURE_UNITS][CR_MAX_BITARRAY];
+} CRTextureBits;
+
+typedef struct {
+    /* Current texture objects (in terms of glBindTexture and glActiveTexture) */
+    CRTextureObj *currentTexture1D;
+    CRTextureObj *currentTexture2D;
+    CRTextureObj *currentTexture3D;
+#ifdef CR_ARB_texture_cube_map
+    CRTextureObj *currentTextureCubeMap;
+#endif
+#ifdef CR_NV_texture_rectangle
+    CRTextureObj *currentTextureRect;
+#endif
+
+    GLboolean   enabled1D;
+    GLboolean   enabled2D;
+    GLboolean   enabled3D;
+#ifdef CR_ARB_texture_cube_map
+    GLboolean   enabledCubeMap;
+#endif
+#ifdef CR_NV_texture_rectangle
+    GLboolean   enabledRect;
+#endif
+#ifdef CR_EXT_texture_lod_bias
+    GLfloat     lodBias;
+#endif
+
+    GLenum      envMode;
+    GLcolorf    envColor;
+    
+    /* GL_ARB_texture_env_combine */
+    GLenum combineModeRGB;       /* GL_REPLACE, GL_DECAL, GL_ADD, etc. */
+    GLenum combineModeA;         /* GL_REPLACE, GL_DECAL, GL_ADD, etc. */
+    GLenum combineSourceRGB[3];  /* GL_PRIMARY_COLOR, GL_TEXTURE, etc. */
+    GLenum combineSourceA[3];    /* GL_PRIMARY_COLOR, GL_TEXTURE, etc. */
+    GLenum combineOperandRGB[3]; /* SRC_COLOR, ONE_MINUS_SRC_COLOR, etc */
+    GLenum combineOperandA[3];   /* SRC_ALPHA, ONE_MINUS_SRC_ALPHA, etc */
+    GLfloat combineScaleRGB;     /* 1 or 2 or 4 */
+    GLfloat combineScaleA;       /* 1 or 2 or 4 */
+
+    GLtexcoordb textureGen;
+    GLvectorf   objSCoeff;
+    GLvectorf   objTCoeff;
+    GLvectorf   objRCoeff;
+    GLvectorf   objQCoeff;
+    GLvectorf   eyeSCoeff;
+    GLvectorf   eyeTCoeff;
+    GLvectorf   eyeRCoeff;
+    GLvectorf   eyeQCoeff;
+    GLtexcoorde gen;
+
+    /* These are only used for glPush/PopAttrib */
+    CRTextureObj Saved1D;
+    CRTextureObj Saved2D;
+    CRTextureObj Saved3D;
+#ifdef CR_ARB_texture_cube_map
+    CRTextureObj SavedCubeMap;
+#endif
+#ifdef CR_NV_texture_rectangle
+    CRTextureObj SavedRect;
+#endif
+} CRTextureUnit;
+
+typedef struct {
+    /* Default texture objects (name = 0) */
+    CRTextureObj base1D;
+    CRTextureObj base2D;
+    CRTextureObj base3D;
+#ifdef CR_ARB_texture_cube_map
+    CRTextureObj baseCubeMap;
+#endif
+#ifdef CR_NV_texture_rectangle
+    CRTextureObj baseRect;
+#endif
+    
+    /* Proxy texture objects */
+    CRTextureObj proxy1D;
+    CRTextureObj proxy2D;
+    CRTextureObj proxy3D;
+#ifdef CR_ARB_texture_cube_map
+    CRTextureObj proxyCubeMap;
+#endif
+#ifdef CR_NV_texture_rectangle
+    CRTextureObj proxyRect;
+#endif
+
+    GLuint      curTextureUnit; /* GL_ACTIVE_TEXTURE */
+
+    GLint       maxLevel;  /* number of mipmap levels possible: [0..max] */
+    GLint       max3DLevel;
+    GLint       maxCubeMapLevel;
+    GLint       maxRectLevel;
+    
+    GLboolean   broadcastTextures; /*@todo what is it for?*/
+
+    /* Per-texture unit state: */
+    CRTextureUnit   unit[CR_MAX_TEXTURE_UNITS];
+} CRTextureState;
+
+DECLEXPORT(void) crStateTextureInit(CRContext *ctx);
+DECLEXPORT(void) crStateTextureDestroy(CRContext *ctx);
+DECLEXPORT(void) crStateTextureFree(CRContext *ctx);
+
+DECLEXPORT(void) crStateTextureInitTexture(GLuint name);
+DECLEXPORT(CRTextureObj *) crStateTextureAllocate(GLuint name);
+    /*void crStateTextureDelete(GLuint name);*/
+DECLEXPORT(CRTextureObj *) crStateTextureGet(PCRStateTracker pState, GLenum target, GLuint textureid);
+DECLEXPORT(int) crStateTextureGetSize(GLenum target, GLenum level);
+DECLEXPORT(const GLvoid *) crStateTextureGetData(GLenum target, GLenum level);
+
+DECLEXPORT(int) crStateTextureCheckDirtyImages(CRContext *from, CRContext *to, GLenum target, int textureUnit);
+
+DECLEXPORT(void) crStateTextureDiff(CRTextureBits *t, CRbitvalue *bitID,
+                                    CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateTextureSwitch(CRTextureBits *t, CRbitvalue *bitID, 
+                                      CRContext *fromCtx, CRContext *toCtx);
+
+DECLEXPORT(void) crStateTextureObjectDiff(CRContext *fromCtx,
+                                          const CRbitvalue *bitID,
+                                          const CRbitvalue *nbitID,
+                                          CRTextureObj *tobj, GLboolean alwaysDirty);
+
+DECLEXPORT(void) crStateDiffAllTextureObjects( CRContext *g, CRbitvalue *bitID, GLboolean bForceUpdate );
+
+DECLEXPORT(void) crStateDeleteTextureObjectData(CRTextureObj *tobj);
+DECLEXPORT(void) crStateDeleteTextureObject(CRTextureObj *tobj);
+
+DECLEXPORT(GLuint) STATE_APIENTRY crStateTextureHWIDtoID(PCRStateTracker pState, GLuint hwid);
+DECLEXPORT(GLuint) STATE_APIENTRY crStateGetTextureHWID(PCRStateTracker pState, GLuint id);
+DECLEXPORT(GLuint) STATE_APIENTRY crStateGetTextureObjHWID(PCRStateTracker pState, CRTextureObj *tobj);
+
+void crStateRegTextures(PCRStateTracker pState, GLsizei n, GLuint *names);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_TEXTURE_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_transform.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_transform.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_transform.h	(revision 86648)
@@ -0,0 +1,91 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef GLTRANS_H
+#define GLTRANS_H
+
+#include "state/cr_statetypes.h"
+
+#include <iprt/cdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NUM_MATRICES 4
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+	CRbitvalue *currentMatrix; /* points to one of the following */
+	CRbitvalue matrixMode[CR_MAX_BITARRAY];
+	CRbitvalue modelviewMatrix[CR_MAX_BITARRAY];
+	CRbitvalue projectionMatrix[CR_MAX_BITARRAY];
+	CRbitvalue colorMatrix[CR_MAX_BITARRAY];
+	CRbitvalue textureMatrix[CR_MAX_BITARRAY];
+	CRbitvalue programMatrix[CR_MAX_BITARRAY];
+	CRbitvalue clipPlane[CR_MAX_BITARRAY];
+	CRbitvalue enable[CR_MAX_BITARRAY];
+	CRbitvalue base[CR_MAX_BITARRAY];
+} CRTransformBits;
+
+typedef struct {
+   CRmatrix *top;      /* points into stack */
+   CRmatrix *stack;    /* array [maxDepth] of CRmatrix */
+   GLuint depth;       /* 0 <= depth < maxDepth */
+   GLuint maxDepth;    /* size of stack[] array */
+} CRMatrixStack;
+
+typedef struct {
+	GLvectord  *clipPlane;
+	GLboolean  *clip;
+
+	GLenum matrixMode;
+
+	/* matrix stacks */
+	CRMatrixStack modelViewStack;
+	CRMatrixStack projectionStack;
+	CRMatrixStack colorStack;
+	CRMatrixStack textureStack[CR_MAX_TEXTURE_UNITS];
+	CRMatrixStack programStack[CR_MAX_PROGRAM_MATRICES];
+	CRMatrixStack *currentStack;
+
+	GLboolean modelViewProjectionValid;
+	CRmatrix  modelViewProjection;  /* product of modelview and projection */
+
+#ifdef CR_OPENGL_VERSION_1_2
+	GLboolean rescaleNormals;
+#endif
+#ifdef CR_IBM_rasterpos_clip
+	GLboolean rasterPositionUnclipped;
+#endif
+	GLboolean normalize;
+} CRTransformState;
+
+
+DECLEXPORT(void) crStateTransformInit(CRContext *ctx);
+DECLEXPORT(void) crStateTransformDestroy(CRContext *ctx);
+
+DECLEXPORT(void) crStateInitMatrixStack(CRMatrixStack *stack, int maxDepth);
+
+DECLEXPORT(void) crStateLoadMatrix(PCRStateTracker pState, const CRmatrix *m);
+
+DECLEXPORT(void) crStateTransformUpdateTransform(CRTransformState *t);
+DECLEXPORT(void) crStateTransformXformPoint(CRTransformState *t, GLvectorf *p);
+
+DECLEXPORT(void) crStateTransformXformPointMatrixf(const CRmatrix *m, GLvectorf *p);
+DECLEXPORT(void) crStateTransformXformPointMatrixd(const CRmatrix *m, GLvectord *p);
+
+DECLEXPORT(void) crStateTransformDiff(CRTransformBits *t, CRbitvalue *bitID,
+                                      CRContext *fromCtx, CRContext *toCtx);
+
+DECLEXPORT(void) crStateTransformSwitch(CRTransformBits *bb, CRbitvalue *bitID, 
+                                        CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_TRANSFORM_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_viewport.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_viewport.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_viewport.h	(revision 86648)
@@ -0,0 +1,57 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_STATE_VIEWPORT_H
+#define CR_STATE_VIEWPORT_H
+
+#include "state/cr_statetypes.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+	CRbitvalue dirty[CR_MAX_BITARRAY];
+	CRbitvalue v_dims[CR_MAX_BITARRAY];
+	CRbitvalue s_dims[CR_MAX_BITARRAY];
+	CRbitvalue enable[CR_MAX_BITARRAY];
+	CRbitvalue depth[CR_MAX_BITARRAY];
+} CRViewportBits;
+
+typedef struct {
+	/* Viewport state */
+	GLint viewportX;
+	GLint viewportY;
+	GLint viewportW;
+	GLint viewportH;
+	GLclampd nearClip;
+	GLclampd farClip;
+	GLboolean viewportValid;
+
+	/* Scissor state */
+	GLboolean	scissorTest;
+	GLint		scissorX;
+	GLint		scissorY;
+	GLsizei		scissorW;
+	GLsizei		scissorH;
+	GLboolean   scissorValid;
+} CRViewportState;
+
+DECLEXPORT(void) crStateViewportInit(CRContext *ctx);
+
+DECLEXPORT(void) crStateViewportApply( CRViewportState *v, GLvectorf *p );
+DECLEXPORT(void) crStateViewportMakeCurrent(CRViewportState *v, CRViewportBits *vb);
+
+DECLEXPORT(void) crStateViewportDiff(CRViewportBits *bb, CRbitvalue *bitID,
+                                     CRContext *fromCtx, CRContext *toCtx);
+DECLEXPORT(void) crStateViewportSwitch(CRViewportBits *bb, CRbitvalue *bitID, 
+                                       CRContext *fromCtx, CRContext *toCtx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_STATE_VIEWPORT_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/opcodes.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/opcodes.py	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/opcodes.py	(revision 86648)
@@ -0,0 +1,106 @@
+# Copyright (c) 2001, Stanford University
+# All rights reserved.
+#
+# See the file LICENSE.txt for information on redistributing this software.
+
+# This script generates include/cr_opcodes.h from the gl_header.parsed file.
+
+from __future__ import print_function
+import sys;
+import string;
+import re;
+
+import apiutil
+
+apiutil.CopyrightC()
+
+print("")
+print("/* DO NOT EDIT - THIS FILE GENERATED BY THE opcodes.py SCRIPT */")
+print("")
+print("#ifndef CR_OPCODES_H")
+print("#define CR_OPCODES_H")
+print("")
+
+keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
+assert len(keys) > 0
+
+print("/* Functions with no return value and input-only parameters */")
+print("typedef enum {")
+
+enum_index = 0
+for func in keys:
+	if "pack" in apiutil.ChromiumProps(func):
+		print("\t%s = %d," % ( apiutil.OpcodeName(func), enum_index ))
+		enum_index = enum_index + 1
+
+print("\tCR_EXTEND_OPCODE=%d," % enum_index)
+enum_index = enum_index + 1
+print("\tCR_CMDBLOCKBEGIN_OPCODE=%d," % enum_index)
+enum_index = enum_index + 1
+print("\tCR_CMDBLOCKEND_OPCODE=%d," % enum_index)
+enum_index = enum_index + 1
+print("\tCR_CMDBLOCKFLUSH_OPCODE=%d," % enum_index)
+print("\tCR_NOP_OPCODE=255")
+if enum_index > 254:
+	# This would have saved Mike some grief if it had been here earlier.
+	print >> sys.stderr, "You have more than 255 opcodes!  You've been adding functions to"
+	print >> sys.stderr, "glapi_parser/APIspec!  Each new function you add"
+	print >> sys.stderr, "gets an opcode assigned to it.  Fortunately for you, we have"
+	print >> sys.stderr, "an ``extend'' opcode.  Please mark the function as"
+	print >> sys.stderr, "'extpack' in APIspec so as to keep the main opcode pool"
+	print >> sys.stderr, "less than 255!  THIS IS A CATASTROPHIC FAILURE, and I WILL NOT CONTINUE!"
+	print >> sys.stderr, "I'm putting an error in the generated header file so you won't miss"
+	print >> sys.stderr, "this even if you're doing a 'make -k.'"
+	print("#error -- more than 255 opcodes!")
+	sys.exit(-1)
+print("} CROpcode;\n")
+
+# count up number of extended opcode commands
+num_extends = 0
+num_auto_codes = 0
+for func in keys:
+	if "extpack" in apiutil.ChromiumProps(func):
+		num_extends += 1
+		if apiutil.ChromiumRelOpCode(func) < 0:
+			num_auto_codes += 1
+
+# sanity check for compatibility breakage
+# we currently have 304
+if num_auto_codes != 304:
+	print >> sys.stderr, "number of auto-generated op-codes should be 304, but is " + str(num_auto_codes)
+	print >> sys.stderr, "which breaks backwards compatibility"
+	print >> sys.stderr, "if this is really what you want to do, please adjust this script"
+	print >> sys.stderr, "to handle a new auto-generated opcodes count"
+	print("#error -- num_auto_codes should be 304, but is " + str(num_auto_codes))
+	sys.exit(-1)
+
+print("/* Functions with a return value or output parameters */")
+print("typedef enum {")
+
+opcode_index = 0
+enum_index = 0
+chrelopcodes = {}
+for func in keys:
+	if "extpack" in apiutil.ChromiumProps(func):
+		opcodeName = apiutil.ExtendedOpcodeName(func)
+		chrelopcode = apiutil.ChromiumRelOpCode(func)
+		opcode = -1
+		if chrelopcode >= 0:
+			if not chrelopcode in chrelopcodes:
+				chrelopcodes[chrelopcode] = chrelopcode
+			else:
+				print >> sys.stderr, "non-unique chrelopcode: " + str(chrelopcode)
+				print("#error -- non-unique chrelopcode:  " + str(num_auto_codes))
+				sys.exit(-1)
+			opcode = num_auto_codes + chrelopcode
+		else:
+			opcode = opcode_index
+			opcode_index = opcode_index + 1
+
+		if enum_index != num_extends-1:
+			print("\t%s = %d," % (opcodeName, opcode ))
+		else:
+			print("\t%s = %d" % (opcodeName, opcode ))
+		enum_index = enum_index + 1
+print("} CRExtendOpcode;\n")
+print("#endif /* CR_OPCODES_H */")
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_arrays.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_arrays.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_arrays.c	(revision 86648)
@@ -0,0 +1,209 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+#include "cr_error.h"
+#include "iprt/types.h"
+
+#define UNUSED(x) ((void)(x))
+/**
+ * \mainpage Packer 
+ *
+ * \section PackerIntroduction Introduction
+ *
+ * Chromium consists of all the top-level files in the cr
+ * directory.  The packer module basically takes care of API dispatch,
+ * and OpenGL state management.
+ *
+ */
+
+void PACK_APIENTRY crPackVertexPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+{
+	/* Packing this command is only useful if we have server-side vertex
+	 * arrays - GL_ARB_vertex_buffer_object.  Note that pointer will really
+	 * be an offset into a server-side buffer.
+     * @todo Because of that we'd only transfer lowest 32bit as there're no 4gb+VBOs (yet?).
+     * Look at glgets regarding max vertices in arrays.
+	 */
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	int packet_length = 24;
+	CR_GET_BUFFERED_POINTER( pc, packet_length );
+	WRITE_DATA( 0, GLint, packet_length );
+	WRITE_DATA( 4, GLenum, CR_VERTEXPOINTER_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLint, size );
+	WRITE_DATA( 12, GLenum, type );
+	WRITE_DATA( 16, GLsizei, stride );
+	WRITE_DATA( 20, GLuint, (GLuint) ((uintptr_t) pointer) );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackColorPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	int packet_length = 24;
+	CR_GET_BUFFERED_POINTER( pc, packet_length );
+	WRITE_DATA( 0, GLint, packet_length );
+	WRITE_DATA( 4, GLenum, CR_COLORPOINTER_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLint, size );
+	WRITE_DATA( 12, GLenum, type );
+	WRITE_DATA( 16, GLsizei, stride );
+	WRITE_DATA( 20, GLuint, (GLuint) ((uintptr_t) pointer) );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackNormalPointer( GLenum type, GLsizei stride, const GLvoid *pointer )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	int packet_length = 20;
+	CR_GET_BUFFERED_POINTER( pc, packet_length );
+	WRITE_DATA( 0, GLint, packet_length );
+	WRITE_DATA( 4, GLenum, CR_NORMALPOINTER_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLenum, type );
+	WRITE_DATA( 12, GLsizei, stride );
+	WRITE_DATA( 16, GLuint, (GLuint) ((uintptr_t) pointer) );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackTexCoordPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	int packet_length = 24;
+	CR_GET_BUFFERED_POINTER( pc, packet_length );
+	WRITE_DATA( 0, GLint, packet_length );
+	WRITE_DATA( 4, GLenum, CR_TEXCOORDPOINTER_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLint, size );
+	WRITE_DATA( 12, GLenum, type );
+	WRITE_DATA( 16, GLsizei, stride );
+	WRITE_DATA( 20, GLuint, (GLuint) ((uintptr_t) pointer) );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackEdgeFlagPointer( GLsizei stride, const GLvoid *pointer )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	int packet_length = 16;
+	CR_GET_BUFFERED_POINTER( pc, packet_length );
+	WRITE_DATA( 0, GLint, packet_length );
+	WRITE_DATA( 4, GLenum, CR_EDGEFLAGPOINTER_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLsizei, stride );
+	WRITE_DATA( 12, GLuint, (GLuint) ((uintptr_t) pointer) );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackIndexPointer( GLenum type, GLsizei stride, const GLvoid *pointer )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	int packet_length = 20;
+	CR_GET_BUFFERED_POINTER( pc, packet_length );
+	WRITE_DATA( 0, GLint, packet_length );
+	WRITE_DATA( 4, GLenum, CR_INDEXPOINTER_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLenum, type );
+	WRITE_DATA( 12, GLsizei, stride );
+	WRITE_DATA( 16, GLuint, (GLuint) ((uintptr_t) pointer) );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackSecondaryColorPointerEXT( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	int packet_length = 24;
+	CR_GET_BUFFERED_POINTER( pc, packet_length );
+	WRITE_DATA( 0, GLint, packet_length );
+	WRITE_DATA( 4, GLenum, CR_SECONDARYCOLORPOINTEREXT_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLint, size );
+	WRITE_DATA( 12, GLenum, type );
+	WRITE_DATA( 16, GLsizei, stride );
+	WRITE_DATA( 20, GLuint, (GLuint) ((uintptr_t) pointer) );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackFogCoordPointerEXT( GLenum type, GLsizei stride, const GLvoid * pointer )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	int packet_length = 20;
+	CR_GET_BUFFERED_POINTER( pc, packet_length );
+	WRITE_DATA( 0, GLint, packet_length );
+	WRITE_DATA( 4, GLenum, CR_FOGCOORDPOINTEREXT_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLenum, type );
+	WRITE_DATA( 12, GLsizei, stride );
+	WRITE_DATA( 16, GLuint, (GLuint) ((uintptr_t) pointer) );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackVertexAttribPointerARB( GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	int packet_length = 32;
+	CR_GET_BUFFERED_POINTER( pc, packet_length );
+	WRITE_DATA( 0, GLint, packet_length );
+	WRITE_DATA( 4, GLenum, CR_VERTEXATTRIBPOINTERARB_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLint, index );
+	WRITE_DATA( 12, GLint, size );
+	WRITE_DATA( 16, GLenum, type );
+	WRITE_DATA( 20, GLboolean, normalized );
+	WRITE_DATA( 24, GLsizei, stride );
+	WRITE_DATA( 28, GLuint, (GLuint) ((uintptr_t) pointer) );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackVertexAttribPointerNV( GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	int packet_length = 28;
+	CR_GET_BUFFERED_POINTER( pc, packet_length );
+	WRITE_DATA( 0, GLint, packet_length );
+	WRITE_DATA( 4, GLenum, CR_VERTEXATTRIBPOINTERNV_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLint, index );
+	WRITE_DATA( 12, GLint, size );
+	WRITE_DATA( 16, GLenum, type );
+	WRITE_DATA( 20, GLsizei, stride );
+	WRITE_DATA( 24, GLuint, (GLuint) ((uintptr_t) pointer) );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackInterleavedArrays( GLenum format, GLsizei stride, const GLvoid *pointer )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	int packet_length = 20;
+	CR_GET_BUFFERED_POINTER( pc, packet_length );
+	WRITE_DATA( 0, GLint, packet_length );
+	WRITE_DATA( 4, GLenum, CR_INTERLEAVEDARRAYS_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLenum, format );
+	WRITE_DATA( 12, GLsizei, stride );
+	WRITE_DATA( 16, GLuint, (GLuint) ((uintptr_t) pointer) );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+
+void PACK_APIENTRY crPackVertexArrayRangeNV( GLsizei length, const GLvoid *pointer )
+{
+	UNUSED( length );
+	UNUSED( pointer );
+	crWarning( "Unimplemented crPackVertexArrayRangeNV" );
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_bbox.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_bbox.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_bbox.h	(revision 86648)
@@ -0,0 +1,183 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_PACK_BBOX_H
+#define CR_PACK_BBOX_H
+
+#include "cr_pack.h"
+
+#define UPDATE_1D_BBOX() \
+if (pc->bounds_min.x > fx)    pc->bounds_min.x = fx;\
+if (pc->bounds_min.y > 0.0f)  pc->bounds_min.y = 0.0f;\
+if (pc->bounds_min.z > 0.0f)  pc->bounds_min.z = 0.0f;\
+if (pc->bounds_max.x < fx)    pc->bounds_max.x = fx;\
+if (pc->bounds_max.y < 0.0f)  pc->bounds_max.y = 0.0f;\
+if (pc->bounds_max.z < 0.0f)  pc->bounds_max.z = 0.0f
+
+#define UPDATE_2D_BBOX() \
+if (pc->bounds_min.x > fx)    pc->bounds_min.x = fx;\
+if (pc->bounds_min.y > fy)    pc->bounds_min.y = fy;\
+if (pc->bounds_min.z > 0.0f)  pc->bounds_min.z = 0.0f;\
+if (pc->bounds_max.x < fx)    pc->bounds_max.x = fx;\
+if (pc->bounds_max.y < fy)    pc->bounds_max.y = fy;\
+if (pc->bounds_max.z < 0.0f)  pc->bounds_max.z = 0.0f
+
+#define UPDATE_3D_BBOX() \
+if (pc->bounds_min.x > fx)    pc->bounds_min.x = fx; \
+if (pc->bounds_min.y > fy)    pc->bounds_min.y = fy; \
+if (pc->bounds_min.z > fz)    pc->bounds_min.z = fz; \
+if (pc->bounds_max.x < fx)    pc->bounds_max.x = fx; \
+if (pc->bounds_max.y < fy)    pc->bounds_max.y = fy; \
+if (pc->bounds_max.z < fz)    pc->bounds_max.z = fz
+
+#ifdef SIMD
+#define UPDATE_3D_BBOX_SIMD() \
+__asm {\
+	__asm movups xmm0, fx\
+	__asm movaps xmm1, pc->bounds_min.x\
+	__asm movaps xmm2, pc->bounds_max.x\
+	__asm minps xmm1, xmm0\
+	__asm maxps xmm2, xmm0\
+	__asm movaps pc->bounds_min.x, xmm1\
+	__asm movaps pc->bounds_max.x, xmm2\
+}
+#define UPDATE_3D_BBOX_SIMD_PACK() \
+__asm {\
+	__asm mov ecx, [data_ptr]\
+	__asm movups xmm0, fx\
+	__asm movaps xmm1, pc->bounds_min.x\
+	__asm movaps xmm2, pc->bounds_max.x\
+	__asm minps xmm1, xmm0\
+	__asm maxps xmm2, xmm0\
+	__asm movaps pc->bounds_min.x, xmm1\
+	__asm movaps pc->bounds_max.x, xmm2\
+	__asm movups [ecx], xmm0\
+}
+#define UPDATE_3DV_BBOX_SIMD() \
+__asm {\
+	__asm mov eax, [v]\
+	__asm mov ecx, [data_ptr]\
+	__asm movups xmm0, [eax]\
+	__asm movaps xmm1, pc->bounds_min.x\
+	__asm movaps xmm2, pc->bounds_max.x\
+	__asm minps xmm1, xmm0\
+	__asm maxps xmm2, xmm0\
+	__asm movaps pc->bounds_min.x, xmm1\
+	__asm movaps pc->bounds_max.x, xmm2\
+	__asm movups [ecx], xmm0\
+}
+#else
+#define UPDATE_3DV_BBOX_SIMD() { CREATE_3D_VFLOATS(); UPDATE_3D_BBOX();}
+#define UPDATE_3D_BBOX_SIMD()  UPDATE_3D_BBOX()
+#endif
+
+#define CREATE_1D_FLOATS() \
+	GLfloat fx = (GLfloat) x;
+
+#define CREATE_2D_FLOATS() \
+	GLfloat fx = (GLfloat) x; \
+	GLfloat fy = (GLfloat) y
+
+#define CREATE_3D_FLOATS() \
+	GLfloat fx = (GLfloat) x; \
+	GLfloat fy = (GLfloat) y; \
+	GLfloat fz = (GLfloat) z
+
+#define CREATE_4D_FLOATS() \
+	GLfloat fx = (GLfloat) x; \
+	GLfloat fy = (GLfloat) y; \
+	GLfloat fz = (GLfloat) z; \
+	GLfloat fw = (GLfloat) w; \
+	fx /= fw; fy /= fw; fz/= fw
+
+/* For glVertexAttrib4N*ARB */
+#define CREATE_3D_FLOATS_B_NORMALIZED() \
+	GLfloat fx = (GLfloat) x * (1.0 / 128.0); \
+	GLfloat fy = (GLfloat) y * (1.0 / 128.0); \
+	GLfloat fz = (GLfloat) z * (1.0 / 128.0);
+
+#define CREATE_3D_FLOATS_UB_NORMALIZED() \
+	GLfloat fx = (GLfloat) x * (1.0 / 255.0); \
+	GLfloat fy = (GLfloat) y * (1.0 / 255.0); \
+	GLfloat fz = (GLfloat) z * (1.0 / 255.0);
+
+#define CREATE_3D_FLOATS_US_NORMALIZED() \
+	GLfloat fx = (GLfloat) x * (1.0 / 65535.0); \
+	GLfloat fy = (GLfloat) y * (1.0 / 65535.0); \
+	GLfloat fz = (GLfloat) z * (1.0 / 65535.0);
+
+
+#define CREATE_1D_VFLOATS() \
+	GLfloat fx = (GLfloat) v[0];
+
+#define CREATE_2D_VFLOATS() \
+	GLfloat fx = (GLfloat) v[0]; \
+	GLfloat fy = (GLfloat) v[1]
+
+#define CREATE_3D_VFLOATS() \
+	GLfloat fx = (GLfloat) v[0]; \
+	GLfloat fy = (GLfloat) v[1]; \
+	GLfloat fz = (GLfloat) v[2]
+
+#define CREATE_4D_VFLOATS() \
+	GLfloat fx = (GLfloat) v[0]; \
+	GLfloat fy = (GLfloat) v[1]; \
+	GLfloat fz = (GLfloat) v[2]; \
+	GLfloat fw = (GLfloat) v[3]; \
+	fx /= fw; fy /= fw; fz/= fw
+
+/* For glVertexAttrib4N*ARB */
+#define CREATE_4D_FLOATS_UB_NORMALIZED() \
+	GLfloat fx = (GLfloat) (x * (1.0 / 255.0)); \
+	GLfloat fy = (GLfloat) (y * (1.0 / 255.0)); \
+	GLfloat fz = (GLfloat) (z * (1.0 / 255.0)); \
+	GLfloat fw = (GLfloat) (w * (1.0 / 255.0)); \
+	fx /= fw; fy /= fw; fz/= fw
+
+#define CREATE_4D_VFLOATS_B_NORMALIZED() \
+	GLfloat fx = (GLfloat) (v[0] * (1.0 / 128.0)); \
+	GLfloat fy = (GLfloat) (v[1] * (1.0 / 128.0)); \
+	GLfloat fz = (GLfloat) (v[2] * (1.0 / 128.0)); \
+	GLfloat fw = (GLfloat) (v[3] * (1.0 / 128.0)); \
+	fx /= fw; fy /= fw; fz/= fw
+
+#define CREATE_4D_VFLOATS_S_NORMALIZED() \
+	GLfloat fx = (GLfloat) (2.0 * v[0] + 1.0) / ((GLfloat) (0xffff)); \
+	GLfloat fy = (GLfloat) (2.0 * v[1] + 1.0) / ((GLfloat) (0xffff)); \
+	GLfloat fz = (GLfloat) (2.0 * v[2] + 1.0) / ((GLfloat) (0xffff)); \
+	GLfloat fw = (GLfloat) (2.0 * v[3] + 1.0) / ((GLfloat) (0xffff)); \
+	fx /= fw; fy /= fw; fz/= fw
+
+#define CREATE_4D_VFLOATS_I_NORMALIZED() \
+	GLfloat fx = (GLfloat) (2.0 * v[0] + 1.0) / ((GLfloat) (0xffffffff)); \
+	GLfloat fy = (GLfloat) (2.0 * v[1] + 1.0) / ((GLfloat) (0xffffffff)); \
+	GLfloat fz = (GLfloat) (2.0 * v[2] + 1.0) / ((GLfloat) (0xffffffff)); \
+	GLfloat fw = (GLfloat) (2.0 * v[3] + 1.0) / ((GLfloat) (0xffffffff)); \
+	fx /= fw; fy /= fw; fz/= fw
+
+#define CREATE_4D_VFLOATS_UB_NORMALIZED() \
+	GLfloat fx = (GLfloat) (v[0] * (1.0 / 255.0)); \
+	GLfloat fy = (GLfloat) (v[1] * (1.0 / 255.0)); \
+	GLfloat fz = (GLfloat) (v[2] * (1.0 / 255.0)); \
+	GLfloat fw = (GLfloat) (v[3] * (1.0 / 255.0)); \
+	fx /= fw; fy /= fw; fz/= fw
+
+#define CREATE_4D_VFLOATS_US_NORMALIZED() \
+	GLfloat fx = (GLfloat) (v[0] * (1.0 / 65535.0)); \
+	GLfloat fy = (GLfloat) (v[1] * (1.0 / 65535.0)); \
+	GLfloat fz = (GLfloat) (v[2] * (1.0 / 65535.0)); \
+	GLfloat fw = (GLfloat) (v[3] * (1.0 / 65535.0)); \
+	fx /= fw; fy /= fw; fz/= fw
+
+#define CREATE_4D_VFLOATS_UI_NORMALIZED() \
+	GLfloat fx = v[0] / ((GLfloat) (0xffffffff)); \
+	GLfloat fy = v[1] / ((GLfloat) (0xffffffff)); \
+	GLfloat fz = v[2] / ((GLfloat) (0xffffffff)); \
+	GLfloat fw = v[3] / ((GLfloat) (0xffffffff)); \
+	fx /= fw; fy /= fw; fz/= fw
+
+#endif /* CR_PACK_BBOX_H */
+
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_beginend.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_beginend.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_beginend.c	(revision 86648)
@@ -0,0 +1,52 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_protocol.h"
+
+void PACK_APIENTRY crPackBegin( GLenum mode )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+
+    if (CR_CMDBLOCK_IS_STARTED(pc, CRPACKBLOCKSTATE_OP_BEGIN))
+    {
+        WARN(("recursive begin?"));
+        return;
+    }
+
+    CR_CMDBLOCK_BEGIN( pc, CRPACKBLOCKSTATE_OP_BEGIN );
+#ifndef VBOX
+    if (pc->buffer.canBarf)
+    {
+        if (!pc->buffer.holds_BeginEnd)
+            pc->Flush( pc->flush_arg );
+        pc->buffer.in_BeginEnd = 1;
+        pc->buffer.holds_BeginEnd = 1;
+    }
+#endif
+    CR_GET_BUFFERED_POINTER_NO_BEGINEND_FLUSH(pc, 4, GL_FALSE);
+    pc->current.begin_data = data_ptr;
+    pc->current.begin_op = pc->buffer.opcode_current;
+    pc->current.attribsUsedMask = 0;
+    WRITE_DATA( 0, GLenum, mode );
+    WRITE_OPCODE( pc, CR_BEGIN_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackEnd( void )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    CR_GET_BUFFERED_POINTER_NO_ARGS( pc );
+    WRITE_OPCODE( pc, CR_END_OPCODE );
+    pc->buffer.in_BeginEnd = 0;
+    CR_CMDBLOCK_END( pc, CRPACKBLOCKSTATE_OP_BEGIN );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_bounds.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_bounds.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_bounds.c	(revision 86648)
@@ -0,0 +1,50 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+#include "cr_mem.h"
+
+void PACK_APIENTRY crPackBoundsInfoCR( CR_PACKER_CONTEXT_ARGDECL const CRrecti *bounds, const GLbyte *payload, GLint len, GLint num_opcodes )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    /* Don't get the buffered_ptr here because we've already 
+     * verified that there's enough space for everything. */
+
+    unsigned char *data_ptr;
+    int len_aligned, total_len;
+
+    CR_LOCK_PACKER_CONTEXT(pc);
+
+    data_ptr = pc->buffer.data_current;
+    len_aligned     = ( len + 0x3 ) & ~0x3;
+    total_len = 24 + len_aligned;
+
+    WRITE_DATA( 0, int, total_len );
+    WRITE_DATA( 4, int, bounds->x1 );
+    WRITE_DATA( 8, int, bounds->y1 );
+    WRITE_DATA( 12, int, bounds->x2 );
+    WRITE_DATA( 16, int, bounds->y2 );
+    WRITE_DATA( 20, int, num_opcodes );
+
+    /* skip the BOUNDSINFO */
+    data_ptr += 24;
+
+    /* put in padding opcodes (deliberately bogus) */
+    switch ( len_aligned - len )
+    {
+      case 3: *data_ptr++ = 0xff; RT_FALL_THRU();
+      case 2: *data_ptr++ = 0xff; RT_FALL_THRU();
+      case 1: *data_ptr++ = 0xff; RT_FALL_THRU();
+      default: break;
+    }
+
+    crMemcpy( data_ptr, payload, len );
+
+    WRITE_OPCODE( pc, CR_BOUNDSINFOCR_OPCODE );
+    pc->buffer.data_current += 24 + len_aligned;
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_buffer.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_buffer.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_buffer.c	(revision 86648)
@@ -0,0 +1,502 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "cr_mem.h"
+#include "cr_string.h"
+#include "packer.h"
+#include "cr_error.h"
+#include "cr_protocol.h"
+#ifndef IN_RING0
+#include "cr_unpack.h"
+#endif
+
+#ifndef IN_RING0
+void crWriteUnalignedDouble( void *buffer, double d )
+{
+	unsigned int *ui = (unsigned int *) buffer;
+	ui[0] = ((unsigned int *) &d)[0];
+	ui[1] = ((unsigned int *) &d)[1];
+}
+
+double crReadUnalignedDouble( const void *buffer )
+{
+	const unsigned int *ui = (unsigned int *) buffer;
+	double d;
+	((unsigned int *) &d)[0] = ui[0];
+	((unsigned int *) &d)[1] = ui[1];
+	return d;
+}
+#endif
+/*
+ * We need the packer to run as efficiently as possible.  To avoid one
+ * pointer dereference from the CRPackContext to the current CRPackBuffer,
+ * we keep a _copy_ of the current CRPackBuffer in the CRPackContext and
+ * operate on the fields in CRPackContext, rather than the CRPackBuffer.
+ *
+ * To keep things in sync, when we change a context's
+ * buffer, we have to use the crPackSet/GetBuffer() functions.
+ */
+
+void crPackSetBuffer( CRPackContext *pc, CRPackBuffer *buffer )
+{
+	CRASSERT( pc );
+	CRASSERT( buffer );
+
+	if (pc->currentBuffer == buffer)
+		return; /* re-bind is no-op */
+
+	if (pc->currentBuffer) {
+		/* Another buffer currently bound to this packer (shouldn't normally occur)
+		 * Release it.  Fixes Ensight issue.
+		 */
+		crPackReleaseBuffer(pc);
+	}
+
+	CRASSERT( pc->currentBuffer == NULL);  /* release if NULL? */
+	CRASSERT( buffer->context == NULL );
+
+	/* bind context to buffer */
+	pc->currentBuffer = buffer;
+	buffer->context = pc;
+
+	/* update the context's packing fields with those from the buffer */
+	pc->buffer = *buffer;  /* struct copy */
+}
+
+#ifndef IN_RING0
+/* This is useful for debugging packer problems */
+void crPackSetBufferDEBUG( const char *file, int line, CRPackContext *pc, CRPackBuffer *buffer)
+						   
+{
+	crPackSetBuffer( pc, buffer );
+	/* record debugging info */
+	pc->file = crStrdup(file);
+	pc->line = line;
+}
+#endif
+
+/*
+ * Release the buffer currently attached to the context.
+ * Update/resync data structures.
+ */
+void crPackReleaseBuffer( CRPackContext *pc )
+{
+	CRPackBuffer *buf;
+	CRASSERT( pc );
+
+	if (!pc->currentBuffer) {
+		crWarning("crPackReleaseBuffer called with no current buffer");
+		return; /* nothing to do */
+	}
+
+	CRASSERT( pc->currentBuffer->context == pc );
+
+	/* buffer to release */
+	buf = pc->currentBuffer;
+
+	/* copy context's fields back into the buffer to update it */
+	*buf = pc->buffer;        /* struct copy */
+
+	/* unbind buffer from context */
+	buf->context = NULL;
+	pc->currentBuffer = NULL;
+
+	/* zero-out context's packing fields just to be safe */
+	crMemZero(&(pc->buffer), sizeof(pc->buffer));
+
+	/* update the debugging fields */
+	if (pc->file)
+		crFree(pc->file);
+	pc->file = NULL;
+	pc->line = -1;
+}
+
+void crPackFlushFunc( CRPackContext *pc, CRPackFlushFunc ff )
+{
+	pc->Flush = ff;
+}
+
+void crPackFlushArg( CRPackContext *pc, void *flush_arg )
+{
+	pc->flush_arg = flush_arg;
+}
+
+void crPackSendHugeFunc( CRPackContext *pc, CRPackSendHugeFunc shf )
+{
+	pc->SendHuge = shf;
+}
+
+/*
+ * This basically resets the buffer attached to <pc> to the default, empty
+ * state.
+ */
+void crPackResetPointers( CRPackContext *pc )
+{
+	const GLboolean geom_only = pc->buffer.geometry_only;   /* save this flag */
+	const GLboolean holds_BeginEnd = pc->buffer.holds_BeginEnd;
+	const GLboolean in_BeginEnd = pc->buffer.in_BeginEnd;
+	const GLboolean canBarf = pc->buffer.canBarf;
+	CRPackBuffer *buf = pc->currentBuffer;
+	CRASSERT(buf);
+	crPackInitBuffer( buf, buf->pack, buf->size, buf->mtu
+#ifdef IN_RING0
+	        , 0
+#endif
+	        );
+	pc->buffer.geometry_only = geom_only;   /* restore the flag */
+	pc->buffer.holds_BeginEnd = holds_BeginEnd;
+	pc->buffer.in_BeginEnd = in_BeginEnd;
+	pc->buffer.canBarf = canBarf;
+}
+
+
+/**
+ * Return max number of opcodes that'll fit in the given buffer size.
+ * Each opcode has at least a 1-word payload, so opcodes can occupy at most 
+ * 20% of the space.
+ */
+int
+crPackMaxOpcodes( int buffer_size )
+{
+	int n = ( buffer_size - sizeof(CRMessageOpcodes) ) / 5;
+	/* Don't forget to add one here in case the buffer size is not
+	 * divisible by 4.  Thanks to Ken Moreland for finding this.
+	 */
+	n++;
+	/* round up to multiple of 4 */
+	n = (n + 0x3) & (~0x3);
+	return n;
+}
+
+
+/**
+ * Return max number of data bytes that'll fit in the given buffer size.
+ */
+int
+crPackMaxData( int buffer_size )
+{
+	int n = buffer_size - sizeof(CRMessageOpcodes);
+	n -= crPackMaxOpcodes(buffer_size);
+	return n;
+}
+
+
+/**
+ * Initialize the given CRPackBuffer object.
+ * The buffer may or may not be currently bound to a CRPackContext.
+ *
+ * Opcodes and operands are packed into a buffer in a special way.
+ * Opcodes start at opcode_start and go downward in memory while operands
+ * start at data_start and go upward in memory.  The buffer is full when we
+ * either run out of opcode space or operand space.
+ *
+ * Diagram (memory addresses increase upward):
+ *
+ *     data_end -> |         |    <- buf->pack + buf->size
+ *                 +---------+
+ *                 |         |
+ *                 |         |
+ *                 | operands|
+ *                 |         |
+ *                 |         |
+ *   data_start -> +---------+
+ * opcode_start -> |         |
+ *                 |         |
+ *                 | opcodes |
+ *                 |         |
+ *                 |         |
+ *  opcode_end  -> +---------+    <- buf->pack
+ *
+ * \param buf  the CRPackBuffer to initialize
+ * \param pack  the address of the buffer for packing opcodes/operands.
+ * \param size  size of the buffer, in bytes
+ * \param mtu   max transmission unit size, in bytes.  When the buffer
+ *              has 'mtu' bytes in it, we have to send it.  The MTU might
+ *              be somewhat smaller than the buffer size.
+ */
+void crPackInitBuffer( CRPackBuffer *buf, void *pack, int size, int mtu
+#ifdef IN_RING0
+        , unsigned int num_opcodes
+#endif
+        )
+{
+#ifndef IN_RING0
+	unsigned int num_opcodes;
+#endif
+
+	CRASSERT(mtu <= size);
+
+	buf->size = size;
+	buf->mtu  = mtu;
+	buf->pack = pack;
+
+#ifdef IN_RING0
+	if(num_opcodes)
+	{
+	    num_opcodes = (num_opcodes + 0x3) & (~0x3);
+	}
+	else
+#endif
+	{
+	    num_opcodes = crPackMaxOpcodes( buf->size );
+	}
+
+	buf->data_start    = 
+		(unsigned char *) buf->pack + num_opcodes + sizeof(CRMessageOpcodes);
+	buf->data_current  = buf->data_start;
+	buf->data_end      = (unsigned char *) buf->pack + buf->size;
+
+	buf->opcode_start   = buf->data_start - 1;
+	buf->opcode_current = buf->opcode_start;
+	buf->opcode_end     = buf->opcode_start - num_opcodes;
+
+	buf->geometry_only = GL_FALSE;
+	buf->holds_BeginEnd = GL_FALSE;
+	buf->in_BeginEnd = GL_FALSE;
+	buf->canBarf = GL_FALSE;
+
+	if (buf->context) {
+		/* Also reset context's packing fields */
+		CRPackContext *pc = buf->context;
+		CRASSERT(pc->currentBuffer == buf);
+		/*crMemcpy( &(pc->buffer), buf, sizeof(*buf) );*/
+		pc->buffer = *buf;
+	}
+}
+
+
+int crPackCanHoldBuffer( CR_PACKER_CONTEXT_ARGDECL const CRPackBuffer *src )
+{
+	const int num_data = crPackNumData(src);
+	const int num_opcode = crPackNumOpcodes(src);
+    int res;
+	CR_GET_PACKER_CONTEXT(pc);
+    CR_LOCK_PACKER_CONTEXT(pc);
+	res = crPackCanHoldOpcode( pc, num_opcode, num_data );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+    return res;
+}
+
+
+int crPackCanHoldBoundedBuffer( CR_PACKER_CONTEXT_ARGDECL const CRPackBuffer *src )
+{
+	const int len_aligned = (src->data_current - src->opcode_current - 1 + 3) & ~3;
+	CR_GET_PACKER_CONTEXT(pc);
+	/* 24 is the size of the bounds-info packet... */
+	return crPackCanHoldOpcode( pc, 1, len_aligned + 24 );
+}
+
+void crPackAppendBuffer( CR_PACKER_CONTEXT_ARGDECL const CRPackBuffer *src )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	const int num_data = crPackNumData(src);
+	const int num_opcode = crPackNumOpcodes(src);
+
+	CRASSERT(num_data >= 0);
+	CRASSERT(num_opcode >= 0);
+
+    CR_LOCK_PACKER_CONTEXT(pc);
+
+	/* don't append onto ourself! */
+	CRASSERT(pc->currentBuffer);
+	CRASSERT(pc->currentBuffer != src);
+
+	if (!crPackCanHoldBuffer(CR_PACKER_CONTEXT_ARG src))
+	{
+		if (src->holds_BeginEnd)
+		{
+			crWarning( "crPackAppendBuffer: overflowed the destination!" );
+            CR_UNLOCK_PACKER_CONTEXT(pc);
+			return;
+		}
+		else
+        {
+			crError( "crPackAppendBuffer: overflowed the destination!" );
+            CR_UNLOCK_PACKER_CONTEXT(pc);
+        }
+	}
+
+	/* Copy the buffer data/operands which are at the head of the buffer */
+	crMemcpy( pc->buffer.data_current, src->data_start, num_data );
+	pc->buffer.data_current += num_data;
+
+	/* Copy the buffer opcodes which are at the tail of the buffer */
+	CRASSERT( pc->buffer.opcode_current - num_opcode >= pc->buffer.opcode_end );
+	crMemcpy( pc->buffer.opcode_current + 1 - num_opcode, src->opcode_current + 1,
+			num_opcode );
+	pc->buffer.opcode_current -= num_opcode;
+	pc->buffer.holds_BeginEnd |= src->holds_BeginEnd;
+	pc->buffer.in_BeginEnd = src->in_BeginEnd;
+	pc->buffer.holds_List |= src->holds_List;
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+
+void
+crPackAppendBoundedBuffer( CR_PACKER_CONTEXT_ARGDECL const CRPackBuffer *src, const CRrecti *bounds )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	const GLbyte *payload = (const GLbyte *) src->opcode_current + 1;
+	const int num_opcodes = crPackNumOpcodes(src);
+	const int length = src->data_current - src->opcode_current - 1;
+
+	CRASSERT(pc);
+    CR_LOCK_PACKER_CONTEXT(pc);
+	CRASSERT(pc->currentBuffer);
+	CRASSERT(pc->currentBuffer != src);
+
+	/*
+	 * payload points to the block of opcodes immediately followed by operands.
+	 */
+
+	if ( !crPackCanHoldBoundedBuffer( CR_PACKER_CONTEXT_ARG src ) )
+	{
+		if (src->holds_BeginEnd)
+		{
+			crWarning( "crPackAppendBoundedBuffer: overflowed the destination!" );
+            CR_UNLOCK_PACKER_CONTEXT(pc);
+			return;
+		}
+		else
+        {
+			crError( "crPackAppendBoundedBuffer: overflowed the destination!" );
+            CR_UNLOCK_PACKER_CONTEXT(pc);
+        }
+	}
+
+	crPackBoundsInfoCR( CR_PACKER_CONTEXT_ARG bounds, payload, length, num_opcodes );
+	pc->buffer.holds_BeginEnd |= src->holds_BeginEnd;
+	pc->buffer.in_BeginEnd = src->in_BeginEnd;
+	pc->buffer.holds_List |= src->holds_List;
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+
+/*
+ * Allocate space for a command that might be very large, such as
+ * glTexImage2D or glBufferDataARB call.
+ * The command buffer _MUST_ then be transmitted by calling crHugePacket.
+ */
+void *crPackAlloc( CR_PACKER_CONTEXT_ARGDECL unsigned int size )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+
+	/* include space for the length and make the payload word-aligned */
+	size = ( size + sizeof(unsigned int) + 0x3 ) & ~0x3;
+
+    CR_LOCK_PACKER_CONTEXT(pc);
+
+	if ( crPackCanHoldOpcode( pc, 1, size ) )
+	{
+		/* we can just put it in the current buffer */
+		CR_GET_BUFFERED_POINTER_NOLOCK(pc, size );  /* NOTE: this sets data_ptr */
+	}
+	else 
+	{
+		/* Okay, it didn't fit.  Maybe it will after we flush. */
+		CR_UNLOCK_PACKER_CONTEXT(pc);
+		pc->Flush( pc->flush_arg );
+		CR_LOCK_PACKER_CONTEXT(pc);
+		if ( crPackCanHoldOpcode( pc, 1, size ) )
+		{
+			CR_GET_BUFFERED_POINTER_NOLOCK(pc, size );  /* NOTE: this sets data_ptr */
+		}
+		else
+		{
+			/* It's really way too big, so allocate a temporary packet
+			 * with space for the single opcode plus the payload &
+			 * header.
+			 */
+			data_ptr = (unsigned char *) 
+				crAlloc( sizeof(CRMessageOpcodes) + 4 + size );
+
+			/* skip the header & opcode space */
+			data_ptr += sizeof(CRMessageOpcodes) + 4;
+		}
+	}
+
+	/* At the top of the function, we added four to the request size and
+	 * rounded it up to the next multiple of four.
+	 *
+	 * At this point, we have:
+	 *
+	 * HIGH MEM        | byte size - 1    |  \
+	 *                   ...                  |
+	 *                   ...                  | - original 'size' bytes for data
+	 *                 | operand data     |   |
+	 * return value -> | operand data     |  /
+	 *                 | byte 3           |  \
+	 *                 | byte 2           |   |- These bytes will store 'size'
+	 *                 | byte 1           |   |  
+	 * data_ptr ->     | byte 0           |  /
+	 *                 | CR opcode        |  <- Set in packspuHuge()
+	 *                 | unused           |
+	 *                 | unused           |
+	 *                 | unused           |
+	 *                 | CRMessageOpcodes |
+	 *                 | CRMessageOpcodes |
+	 *                   ...               
+	 *                 | CRMessageOpcodes |
+	 *                 | CRMessageOpcodes |
+	 * LOW MEM         +------------------+
+	 */
+
+	*((unsigned int *) data_ptr) = size;
+	return data_ptr + 4;
+}
+
+#define IS_BUFFERED( packet ) \
+    ((unsigned char *) (packet) >= pc->buffer.data_start && \
+	 (unsigned char *) (packet) < pc->buffer.data_end)
+
+
+/*
+ * Transmit a packet which was allocated with crPackAlloc.
+ */
+void crHugePacket( CR_PACKER_CONTEXT_ARGDECL CROpcode opcode, void *packet )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+
+	if ( IS_BUFFERED( packet ) )
+		WRITE_OPCODE( pc, opcode );
+	else
+		pc->SendHuge( opcode, packet );
+}
+
+void crPackFree( CR_PACKER_CONTEXT_ARGDECL void *packet )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+    
+	if ( IS_BUFFERED( packet ) )
+    {
+        CR_UNLOCK_PACKER_CONTEXT(pc);
+		return;
+    }
+
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+	
+	/* the pointer passed in doesn't include the space for the single
+	 * opcode (4 bytes because of the alignment requirement) or the
+	 * length field or the header */
+	crFree( (unsigned char *) packet - 8 - sizeof(CRMessageOpcodes) );
+}
+
+void crNetworkPointerWrite( CRNetworkPointer *dst, void *src )
+{
+	/* init CRNetworkPointer with invalid values */
+	dst->ptrAlign[0] = 0xDeadBeef;
+	dst->ptrAlign[1] = 0xCafeBabe;
+	/* copy the pointer's value into the CRNetworkPointer */
+	crMemcpy( dst, &src, sizeof(src) );
+
+	/* if either assertion fails, it probably means that a packer function
+	 * (which returns a value) was called without setting up the writeback
+	 * pointer, or something like that.
+	 */
+	CRASSERT(dst->ptrAlign[0] != 0xffffffff);
+	CRASSERT(dst->ptrAlign[0] != 0xDeadBeef);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_bufferobject.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_bufferobject.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_bufferobject.c	(revision 86648)
@@ -0,0 +1,121 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_error.h"
+#include "cr_string.h"
+#include "cr_version.h"
+
+
+void PACK_APIENTRY
+crPackMapBufferARB( GLenum target, GLenum access,
+            void * return_value, int * writeback )
+{
+     (void)writeback;
+     (void)return_value;
+     (void)target;
+     (void)access;
+     crWarning("Can't pack MapBufferARB command!");
+}
+
+
+void PACK_APIENTRY
+crPackUnmapBufferARB( GLenum target, GLboolean* return_value, int * writeback )
+{
+     (void)target;
+     (void)return_value;
+     (void)writeback;
+     crWarning("Can't pack UnmapBufferARB command!");
+}
+
+
+void PACK_APIENTRY
+crPackBufferDataARB( GLenum target, GLsizeiptrARB size,
+                                         const GLvoid * data, GLenum usage )
+{
+    unsigned char *data_ptr, *start_ptr;
+    int packet_length;
+
+    packet_length = sizeof(GLenum)
+        + sizeof(target) + sizeof(GLuint) + sizeof(usage) + sizeof(GLint);
+
+    /*Note: it's valid to pass a NULL pointer here, which tells GPU drivers to allocate memory for the VBO*/
+    if (data) packet_length += size;
+
+    start_ptr = data_ptr = (unsigned char *) crPackAlloc( packet_length );
+
+    WRITE_DATA_AI(GLenum, CR_BUFFERDATAARB_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLenum, target);
+    WRITE_DATA_AI(GLuint, (GLuint) size);
+    WRITE_DATA_AI(GLenum, usage);
+    WRITE_DATA_AI(GLint, (GLint) (data!=NULL));
+    if (data)
+         crMemcpy(data_ptr, data, size);
+
+    crHugePacket( CR_EXTEND_OPCODE, start_ptr );
+    crPackFree( start_ptr );
+}
+
+
+void PACK_APIENTRY
+crPackBufferSubDataARB( GLenum target, GLintptrARB offset, GLsizeiptrARB size,
+                                                const GLvoid * data )
+{
+    unsigned char *data_ptr, *start_ptr;
+    int packet_length;
+
+    if (!data)
+        return;
+
+    packet_length = sizeof(GLenum)
+        + sizeof(target) + sizeof(GLuint) + sizeof(GLuint) + size;
+
+    start_ptr = data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA_AI(GLenum, CR_BUFFERSUBDATAARB_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLenum, target);
+    WRITE_DATA_AI(GLuint, (GLuint) offset);
+    WRITE_DATA_AI(GLuint, (GLuint) size);
+    crMemcpy(data_ptr, data, size);
+
+    crHugePacket(CR_EXTEND_OPCODE, start_ptr);
+    crPackFree(start_ptr);
+}
+
+void PACK_APIENTRY 
+crPackGetBufferSubDataARB( GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data, int * writeback )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+	(void) pc;
+	CR_GET_BUFFERED_POINTER( pc, 36 );
+	WRITE_DATA( 0, GLint, 36 );
+	WRITE_DATA( 4, GLenum, CR_GETBUFFERSUBDATAARB_EXTEND_OPCODE );
+	WRITE_DATA( 8, GLenum, target );
+	WRITE_DATA( 12, GLuint, (GLuint) offset );
+	WRITE_DATA( 16, GLuint, (GLuint) size );
+	WRITE_NETWORK_POINTER( 20, (void *) data );
+	WRITE_NETWORK_POINTER( 28, (void *) writeback );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+	CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY
+crPackDeleteBuffersARB(GLsizei n, const GLuint * buffers)
+{
+    unsigned char *data_ptr;
+    int packet_length = sizeof(GLenum) + sizeof(n) + n * sizeof(*buffers);
+
+    if (!buffers)
+        return;
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA( 0, GLenum, CR_DELETEBUFFERSARB_EXTEND_OPCODE );
+    WRITE_DATA( 4, GLsizei, n );
+    crMemcpy( data_ptr + 8, buffers, n * sizeof(*buffers) );
+    crHugePacket( CR_EXTEND_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_client.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_client.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_client.c	(revision 86648)
@@ -0,0 +1,1089 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+#include "cr_version.h"
+#include "state/cr_limits.h"
+#include "cr_glstate.h"
+
+/*Convert from GLint to GLfloat in [-1.f,1.f]*/
+#define CRP_I2F_NORM(i)  ((2.f*((GLint)(i))+1.f) * (1.f/4294967294.f))
+/*Convert from GLshort to GLfloat in [-1.f,1.f]*/
+#define CRP_S2F_NORM(s)  ((2.f*((GLshort)(s))+1.f) * (1.f/65535.f))
+/*Convert from GLbyte to GLfloat in [-1.f,1.f]*/
+#define CRP_B2F_NORM(b)  ((2.f*((GLbyte)(b))+1.f) * (1.f/255.f))
+/*Convert from GLuint to GLfloat in [0.f,1.f]*/
+#define CRP_UI2F_NORM(i) ((GLfloat)(i) * (1.f/4294967295.f))
+/*Convert from GLushort to GLfloat in [0.f,1.f]*/
+#define CRP_US2F_NORM(s) ((GLfloat)(s) * (1.f/65535.f))
+/*Convert from GLubyte to GLfloat in [0.f,1.f]*/
+#define CRP_UB2F_NORM(b) ((GLfloat)(b) * (1.f/255.f))
+
+static void crPackVertexAttrib(const CRVertexArrays *array, unsigned int attr, GLint index)
+{
+    unsigned char *p = array->a[attr].p + index * array->a[attr].stride;
+
+#ifdef DEBUG_misha
+    Assert(index >= 0);
+#endif
+
+#ifdef CR_ARB_vertex_buffer_object
+    if (array->a[attr].buffer && array->a[attr].buffer->data)
+    {
+        Assert(((uintptr_t)p) < array->a[attr].buffer->size);
+        p = (unsigned char *)(array->a[attr].buffer->data) + (uintptr_t)p;
+    }
+#endif
+
+    if (!p)
+    {
+        crWarning("crPackVertexAttrib: NULL ptr!");
+        return;
+    }
+
+    switch (array->a[attr].type)
+    {
+        case GL_SHORT:
+        {
+            GLshort *sPtr = (GLshort*) p;
+            switch (array->a[attr].size)
+            {
+                case 1:
+                    if (array->a[attr].normalized)
+                        crPackVertexAttrib1fARB(attr, CRP_S2F_NORM(sPtr[0]));
+                    else
+                        crPackVertexAttrib1svARB(attr, sPtr);
+                    break;
+                case 2:
+                    if (array->a[attr].normalized)
+                        crPackVertexAttrib2fARB(attr, CRP_S2F_NORM(sPtr[0]), CRP_S2F_NORM(sPtr[1]));
+                    else
+                        crPackVertexAttrib2svARB(attr, sPtr);
+                    break;
+                case 3:
+                    if (array->a[attr].normalized)
+                        crPackVertexAttrib3fARB(attr, CRP_S2F_NORM(sPtr[0]), CRP_S2F_NORM(sPtr[1]), CRP_S2F_NORM(sPtr[2]));
+                    else
+                        crPackVertexAttrib3svARB(attr, sPtr);
+                    break;
+                case 4:
+                    if (array->a[attr].normalized)
+                        crPackVertexAttrib4NsvARB(attr, sPtr);
+                    else
+                        crPackVertexAttrib4svARB(attr, sPtr);
+                    break;
+            }
+            break;
+        }
+        case GL_UNSIGNED_SHORT:
+        {
+            GLushort *usPtr = (GLushort*) p;
+            if (array->a[attr].normalized)
+            {
+                switch (array->a[attr].size)
+                {
+                    case 1:
+                        crPackVertexAttrib1fARB(attr, CRP_US2F_NORM(usPtr[0]));
+                        break;
+                    case 2:
+                        crPackVertexAttrib2fARB(attr, CRP_US2F_NORM(usPtr[0]), CRP_US2F_NORM(usPtr[1]));
+                        break;
+                    case 3:
+                        crPackVertexAttrib3fARB(attr, CRP_US2F_NORM(usPtr[0]), CRP_US2F_NORM(usPtr[1]), CRP_US2F_NORM(usPtr[2]));
+                        break;
+                    case 4:
+                        crPackVertexAttrib4NusvARB(attr, usPtr);
+                        break;
+                }
+            }
+            else
+            {
+                GLushort usv[4];
+                switch (array->a[attr].size)
+                {
+                    case 4:
+                        crPackVertexAttrib4usvARB(attr, usPtr);
+                        break;
+                    case 3: usv[2] = usPtr[2]; RT_FALL_THRU();
+                    case 2: usv[1] = usPtr[1]; RT_FALL_THRU();
+                    case 1:
+                        usv[0] = usPtr[0];
+                        crPackVertexAttrib4usvARB(attr, usv);
+                        break;
+                }
+            }
+            break;
+        }
+        case GL_INT:
+        {
+            GLint *iPtr = (GLint*) p;
+            if (array->a[attr].normalized)
+            {
+                switch (array->a[attr].size)
+                {
+                    case 1:
+                        crPackVertexAttrib1fARB(attr, CRP_I2F_NORM(iPtr[0]));
+                        break;
+                    case 2:
+                        crPackVertexAttrib2fARB(attr, CRP_I2F_NORM(iPtr[0]), CRP_I2F_NORM(iPtr[1]));
+                        break;
+                    case 3:
+                        crPackVertexAttrib3fARB(attr, CRP_I2F_NORM(iPtr[0]), CRP_I2F_NORM(iPtr[1]), CRP_I2F_NORM(iPtr[2]));
+                        break;
+                    case 4:
+                        crPackVertexAttrib4NivARB(attr, iPtr);
+                        break;
+                }
+            }
+            else
+            {
+                GLint iv[4];
+                switch (array->a[attr].size)
+                {
+                    case 4:
+                        crPackVertexAttrib4ivARB(attr, iPtr);
+                        break;
+                    case 3: iv[2] = iPtr[2]; RT_FALL_THRU();
+                    case 2: iv[1] = iPtr[1]; RT_FALL_THRU();
+                    case 1:
+                        iv[0] = iPtr[0];
+                        crPackVertexAttrib4ivARB(attr, iv);
+                        break;
+                }
+            }
+            break;
+        }
+        case GL_UNSIGNED_INT:
+        {
+            GLuint *uiPtr = (GLuint*) p;
+            if (array->a[attr].normalized)
+            {
+                switch (array->a[attr].size)
+                {
+                    case 1:
+                        crPackVertexAttrib1fARB(attr, CRP_UI2F_NORM(uiPtr[0]));
+                        break;
+                    case 2:
+                        crPackVertexAttrib2fARB(attr, CRP_UI2F_NORM(uiPtr[0]), CRP_UI2F_NORM(uiPtr[1]));
+                        break;
+                    case 3:
+                        crPackVertexAttrib3fARB(attr, CRP_UI2F_NORM(uiPtr[0]), CRP_UI2F_NORM(uiPtr[1]), CRP_UI2F_NORM(uiPtr[2]));
+                        break;
+                    case 4:
+                        crPackVertexAttrib4NuivARB(attr, uiPtr);
+                        break;
+                }
+            }
+            else
+            {
+                GLuint uiv[4];
+                switch (array->a[attr].size)
+                {
+                    case 4:
+                        crPackVertexAttrib4uivARB(attr, uiPtr);
+                        break;
+                    case 3: uiv[2] = uiPtr[2]; RT_FALL_THRU();
+                    case 2: uiv[1] = uiPtr[1]; RT_FALL_THRU();
+                    case 1:
+                        uiv[0] = uiPtr[0];
+                        crPackVertexAttrib4uivARB(attr, uiv);
+                        break;
+                }
+            }
+            break;
+        }
+        case GL_FLOAT:
+            switch (array->a[attr].size)
+            {
+                case 1: crPackVertexAttrib1fvARB(attr, (GLfloat *)p); break;
+                case 2: crPackVertexAttrib2fvARB(attr, (GLfloat *)p); break;
+                case 3: crPackVertexAttrib3fvARB(attr, (GLfloat *)p); break;
+                case 4: crPackVertexAttrib4fvARB(attr, (GLfloat *)p); break;
+            }
+            break;
+        case GL_DOUBLE:
+            switch (array->a[attr].size)
+            {
+                case 1: crPackVertexAttrib1dvARB(attr, (GLdouble *)p); break;
+                case 2: crPackVertexAttrib2dvARB(attr, (GLdouble *)p); break;
+                case 3: crPackVertexAttrib3dvARB(attr, (GLdouble *)p); break;
+                case 4: crPackVertexAttrib4dvARB(attr, (GLdouble *)p); break;
+            }
+            break;
+        case GL_BYTE:
+        {
+            GLbyte *bPtr = (GLbyte*) p;
+            if (array->a[attr].normalized)
+            {
+                switch (array->a[attr].size)
+                {
+                    case 1:
+                        crPackVertexAttrib1fARB(attr, CRP_B2F_NORM(bPtr[0]));
+                        break;
+                    case 2:
+                        crPackVertexAttrib2fARB(attr, CRP_B2F_NORM(bPtr[0]), CRP_B2F_NORM(bPtr[1]));
+                        break;
+                    case 3:
+                        crPackVertexAttrib3fARB(attr, CRP_B2F_NORM(bPtr[0]), CRP_B2F_NORM(bPtr[1]), CRP_B2F_NORM(bPtr[2]));
+                        break;
+                    case 4:
+                        crPackVertexAttrib4NbvARB(attr, bPtr);
+                        break;
+                }
+            }
+            else
+            {
+                GLbyte bv[4];
+                switch (array->a[attr].size)
+                {
+                    case 4:
+                        crPackVertexAttrib4bvARB(attr, bPtr);
+                        break;
+                    case 3: bv[2] = bPtr[2]; RT_FALL_THRU();
+                    case 2: bv[1] = bPtr[1]; RT_FALL_THRU();
+                    case 1:
+                        bv[0] = bPtr[0];
+                        crPackVertexAttrib4bvARB(attr, bv);
+                        break;
+                }
+            }
+            break;
+        }
+        case GL_UNSIGNED_BYTE:
+        {
+            GLubyte *ubPtr = (GLubyte*) p;
+            if (array->a[attr].normalized)
+            {
+                switch (array->a[attr].size)
+                {
+                    case 1:
+                        crPackVertexAttrib1fARB(attr, CRP_UB2F_NORM(ubPtr[0]));
+                        break;
+                    case 2:
+                        crPackVertexAttrib2fARB(attr, CRP_UB2F_NORM(ubPtr[0]), CRP_UB2F_NORM(ubPtr[1]));
+                        break;
+                    case 3:
+                        crPackVertexAttrib3fARB(attr, CRP_UB2F_NORM(ubPtr[0]), CRP_UB2F_NORM(ubPtr[1]), CRP_UB2F_NORM(ubPtr[2]));
+                        break;
+                    case 4:
+                        crPackVertexAttrib4NubvARB(attr, ubPtr);
+                        break;
+                }
+            }
+            else
+            {
+                GLubyte ubv[4];
+                switch (array->a[attr].size)
+                {
+                    case 4:
+                        crPackVertexAttrib4ubvARB(attr, ubPtr);
+                        break;
+                    case 3: ubv[2] = ubPtr[2]; RT_FALL_THRU();
+                    case 2: ubv[1] = ubPtr[1]; RT_FALL_THRU();
+                    case 1:
+                        ubv[0] = ubPtr[0];
+                        crPackVertexAttrib4ubvARB(attr, ubv);
+                        break;
+                }
+            }
+            break;
+        }
+        default:
+            crWarning("Bad datatype for vertex attribute [%d] array: 0x%x\n",
+                       attr, array->a[attr].type);
+    }
+}
+
+/*
+ * Expand glArrayElement into crPackVertex/Color/Normal/etc.
+ */
+void
+crPackExpandArrayElement(GLint index, CRClientState *c, const GLfloat *pZva)
+{
+    unsigned char *p;
+    unsigned int unit, attr;
+    const CRVertexArrays *array = &(c->array);
+    const GLboolean vpEnabled = crStateGetCurrent(g_pStateTracker)->program.vpEnabled;
+
+    /*crDebug("crPackExpandArrayElement(%i)", index);*/
+
+    if (array->n.enabled && !(vpEnabled && array->a[VERT_ATTRIB_NORMAL].enabled))
+    {
+        p = array->n.p + index * array->n.stride;
+
+#ifdef CR_ARB_vertex_buffer_object
+        if (array->n.buffer && array->n.buffer->data)
+        {
+            p = (unsigned char *)(array->n.buffer->data) + (uintptr_t)p;
+        }
+#endif
+
+        switch (array->n.type)
+        {
+            case GL_BYTE: crPackNormal3bv((GLbyte *)p); break;
+            case GL_SHORT: crPackNormal3sv((GLshort *)p); break;
+            case GL_INT: crPackNormal3iv((GLint *)p); break;
+            case GL_FLOAT: crPackNormal3fv((GLfloat *)p); break;
+            case GL_DOUBLE: crPackNormal3dv((GLdouble *)p); break;
+            default:
+                crWarning("Unhandled: crPackExpandArrayElement, array->n.type 0x%x", array->n.type);
+        }
+    }
+
+    if (array->c.enabled && !(vpEnabled && array->a[VERT_ATTRIB_COLOR0].enabled))
+    {
+        p = array->c.p + index * array->c.stride;
+
+#ifdef CR_ARB_vertex_buffer_object
+        if (array->c.buffer && array->c.buffer->data)
+        {
+            p = (unsigned char *)(array->c.buffer->data) + (uintptr_t)p;
+        }
+#endif
+
+        switch (array->c.type)
+        {
+            case GL_BYTE:
+                switch (c->array.c.size)
+                {
+                    case 3: crPackColor3bv((GLbyte *)p); break;
+                    case 4: crPackColor4bv((GLbyte *)p); break;
+                }
+                break;
+            case GL_UNSIGNED_BYTE:
+                switch (c->array.c.size)
+                {
+                    case 3: crPackColor3ubv((GLubyte *)p); break;
+                    case 4: crPackColor4ubv((GLubyte *)p); break;
+                }
+                break;
+            case GL_SHORT:
+                switch (c->array.c.size)
+                {
+                    case 3: crPackColor3sv((GLshort *)p); break;
+                    case 4: crPackColor4sv((GLshort *)p); break;
+                }
+                break;
+            case GL_UNSIGNED_SHORT:
+                switch (c->array.c.size)
+                {
+                    case 3: crPackColor3usv((GLushort *)p); break;
+                    case 4: crPackColor4usv((GLushort *)p); break;
+                }
+                break;
+            case GL_INT:
+                switch (c->array.c.size)
+                {
+                    case 3: crPackColor3iv((GLint *)p); break;
+                    case 4: crPackColor4iv((GLint *)p); break;
+                }
+                break;
+            case GL_UNSIGNED_INT:
+                switch (c->array.c.size)
+                {
+                    case 3: crPackColor3uiv((GLuint *)p); break;
+                    case 4: crPackColor4uiv((GLuint *)p); break;
+                }
+                break;
+            case GL_FLOAT:
+                switch (c->array.c.size)
+                {
+                    case 3: crPackColor3fv((GLfloat *)p); break;
+                    case 4: crPackColor4fv((GLfloat *)p); break;
+                }
+                break;
+            case GL_DOUBLE:
+                switch (c->array.c.size)
+                {
+                    case 3: crPackColor3dv((GLdouble *)p); break;
+                    case 4: crPackColor4dv((GLdouble *)p); break;
+                }
+                break;
+            default:
+                crWarning("Unhandled: crPackExpandArrayElement, array->c.type 0x%x", array->c.type);
+        }
+    }
+
+#ifdef CR_EXT_secondary_color
+    if (array->s.enabled && !(vpEnabled && array->a[VERT_ATTRIB_COLOR1].enabled))
+    {
+        p = array->s.p + index * array->s.stride;
+
+#ifdef CR_ARB_vertex_buffer_object
+        if (array->s.buffer && array->s.buffer->data)
+        {
+            p = (unsigned char *)(array->s.buffer->data) + (uintptr_t)p;
+        }
+#endif
+
+        switch (array->s.type)
+        {
+            case GL_BYTE:
+                crPackSecondaryColor3bvEXT((GLbyte *)p); break;
+            case GL_UNSIGNED_BYTE:
+                crPackSecondaryColor3ubvEXT((GLubyte *)p); break;
+            case GL_SHORT:
+                crPackSecondaryColor3svEXT((GLshort *)p); break;
+            case GL_UNSIGNED_SHORT:
+                crPackSecondaryColor3usvEXT((GLushort *)p); break;
+            case GL_INT:
+                crPackSecondaryColor3ivEXT((GLint *)p); break;
+            case GL_UNSIGNED_INT:
+                crPackSecondaryColor3uivEXT((GLuint *)p); break;
+            case GL_FLOAT:
+                crPackSecondaryColor3fvEXT((GLfloat *)p); break;
+            case GL_DOUBLE:
+                crPackSecondaryColor3dvEXT((GLdouble *)p); break;
+            default:
+                crWarning("Unhandled: crPackExpandArrayElement, array->s.type 0x%x", array->s.type);
+        }
+    }
+#endif /* CR_EXT_secondary_color */
+
+
+#ifdef CR_EXT_fog_coord
+    if (array->f.enabled && !(vpEnabled && array->a[VERT_ATTRIB_FOG].enabled))
+    {
+        p = array->f.p + index * array->f.stride;
+
+#ifdef CR_ARB_vertex_buffer_object
+        if (array->f.buffer && array->f.buffer->data)
+        {
+            p = (unsigned char *)(array->f.buffer->data) + (uintptr_t)p;
+        }
+#endif
+        crPackFogCoordfEXT( *((GLfloat *) p) );
+    }
+#endif /* CR_EXT_fog_coord */
+
+    for (unit = 0 ; unit < CR_MAX_TEXTURE_UNITS ; unit++)
+    {
+        if (array->t[unit].enabled && !(vpEnabled && array->a[VERT_ATTRIB_TEX0+unit].enabled))
+        {
+            p = array->t[unit].p + index * array->t[unit].stride;
+
+#ifdef CR_ARB_vertex_buffer_object
+            if (array->t[unit].buffer && array->t[unit].buffer->data)
+            {
+                p = (unsigned char *)(array->t[unit].buffer->data) + (uintptr_t)p;
+            }
+#endif
+
+            switch (array->t[unit].type)
+            {
+                case GL_SHORT:
+                    switch (array->t[unit].size)
+                    {
+                        case 1: crPackMultiTexCoord1svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break;
+                        case 2: crPackMultiTexCoord2svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break;
+                        case 3: crPackMultiTexCoord3svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break;
+                        case 4: crPackMultiTexCoord4svARB(GL_TEXTURE0_ARB + unit, (GLshort *)p); break;
+                    }
+                    break;
+                case GL_INT:
+                    switch (array->t[unit].size)
+                    {
+                        case 1: crPackMultiTexCoord1ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break;
+                        case 2: crPackMultiTexCoord2ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break;
+                        case 3: crPackMultiTexCoord3ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break;
+                        case 4: crPackMultiTexCoord4ivARB(GL_TEXTURE0_ARB + unit, (GLint *)p); break;
+                    }
+                    break;
+                case GL_FLOAT:
+                    switch (array->t[unit].size)
+                    {
+                        case 1: crPackMultiTexCoord1fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break;
+                        case 2: crPackMultiTexCoord2fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break;
+                        case 3: crPackMultiTexCoord3fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break;
+                        case 4: crPackMultiTexCoord4fvARB(GL_TEXTURE0_ARB + unit, (GLfloat *)p); break;
+                    }
+                    break;
+                case GL_DOUBLE:
+                    switch (array->t[unit].size)
+                    {
+                        case 1: crPackMultiTexCoord1dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break;
+                        case 2: crPackMultiTexCoord2dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break;
+                        case 3: crPackMultiTexCoord3dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break;
+                        case 4: crPackMultiTexCoord4dvARB(GL_TEXTURE0_ARB + unit, (GLdouble *)p); break;
+                    }
+                    break;
+                default:
+                    crWarning("Unhandled: crPackExpandArrayElement, array->t[%i].type 0x%x", unit, array->t[unit].type);
+            }
+        }
+    }
+
+    if (array->i.enabled)
+    {
+        p = array->i.p + index * array->i.stride;
+
+#ifdef CR_ARB_vertex_buffer_object
+        if (array->i.buffer && array->i.buffer->data)
+        {
+            p = (unsigned char *)(array->i.buffer->data) + (uintptr_t)p;
+        }
+#endif
+
+        switch (array->i.type)
+        {
+            case GL_SHORT: crPackIndexsv((GLshort *)p); break;
+            case GL_INT: crPackIndexiv((GLint *)p); break;
+            case GL_FLOAT: crPackIndexfv((GLfloat *)p); break;
+            case GL_DOUBLE: crPackIndexdv((GLdouble *)p); break;
+            default:
+                crWarning("Unhandled: crPackExpandArrayElement, array->i.type 0x%x", array->i.type);
+        }
+    }
+
+    if (array->e.enabled)
+    {
+        p = array->e.p + index * array->e.stride;
+
+#ifdef CR_ARB_vertex_buffer_object
+        if (array->e.buffer && array->e.buffer->data)
+        {
+            p = (unsigned char *)(array->e.buffer->data) + (uintptr_t)p;
+        }
+#endif
+
+        crPackEdgeFlagv(p);
+    }
+
+    for (attr = 1; attr < VERT_ATTRIB_MAX; attr++)
+    {
+        if (array->a[attr].enabled)
+        {
+            crPackVertexAttrib(array, attr, index);
+        }
+    }
+
+    if (array->a[VERT_ATTRIB_POS].enabled)
+    {
+        crPackVertexAttrib(array, VERT_ATTRIB_POS, index);
+    }
+    else if (pZva)
+    {
+        crPackVertexAttrib4fvARB(VERT_ATTRIB_POS, pZva);
+    }
+    else if (array->v.enabled)
+    {
+        p = array->v.p + index * array->v.stride;
+
+#ifdef CR_ARB_vertex_buffer_object
+        if (array->v.buffer && array->v.buffer->data)
+        {
+            p = (unsigned char *)(array->v.buffer->data) + (uintptr_t)p;
+        }
+#endif
+        switch (array->v.type)
+        {
+            case GL_SHORT:
+                switch (c->array.v.size)
+                {
+                    case 2: crPackVertex2sv((GLshort *)p); break;
+                    case 3: crPackVertex3sv((GLshort *)p); break;
+                    case 4: crPackVertex4sv((GLshort *)p); break;
+                }
+                break;
+            case GL_INT:
+                switch (c->array.v.size)
+                {
+                    case 2: crPackVertex2iv((GLint *)p); break;
+                    case 3: crPackVertex3iv((GLint *)p); break;
+                    case 4: crPackVertex4iv((GLint *)p); break;
+                }
+                break;
+            case GL_FLOAT:
+                switch (c->array.v.size)
+                {
+                    case 2: crPackVertex2fv((GLfloat *)p); break;
+                    case 3: crPackVertex3fv((GLfloat *)p); break;
+                    case 4: crPackVertex4fv((GLfloat *)p); break;
+                }
+                break;
+            case GL_DOUBLE:
+                switch (c->array.v.size)
+                {
+                    case 2: crPackVertex2dv((GLdouble *)p); break;
+                    case 3: crPackVertex3dv((GLdouble *)p); break;
+                    case 4: crPackVertex4dv((GLdouble *)p); break;
+                }
+                break;
+            default:
+                crWarning("Unhandled: crPackExpandArrayElement, array->v.type 0x%x", array->v.type);
+        }
+    }
+}
+
+
+void
+crPackExpandDrawArrays(GLenum mode, GLint first, GLsizei count, CRClientState *c, const GLfloat *pZva)
+{
+    int i;
+
+    if (count < 0)
+    {
+        __PackError(__LINE__, __FILE__, GL_INVALID_VALUE, "crPackDrawArrays(negative count)");
+        return;
+    }
+
+    if (mode > GL_POLYGON)
+    {
+        __PackError(__LINE__, __FILE__, GL_INVALID_ENUM, "crPackDrawArrays(bad mode)");
+        return;
+    }
+
+    crPackBegin(mode);
+    for (i=0; i<count; i++)
+    {
+        crPackExpandArrayElement(first + i, c, pZva);
+    }
+    crPackEnd();
+}
+
+static GLsizei crPackElementsIndexSize(GLenum type)
+{
+    switch (type)
+    {
+        case GL_UNSIGNED_BYTE:
+            return sizeof(GLubyte);
+        case GL_UNSIGNED_SHORT:
+            return sizeof(GLushort);
+        case GL_UNSIGNED_INT:
+            return sizeof(GLuint);
+        default:
+            crError("Unknown type 0x%x in crPackElementsIndexSize", type);
+            return 0;
+    }
+}
+
+void PACK_APIENTRY
+crPackDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
+{
+    unsigned char *data_ptr, *start_ptr;
+    int packet_length = sizeof(int) + sizeof(mode) + sizeof(count) + sizeof(type) + sizeof(GLuint);
+    GLsizei indexsize;
+#ifdef CR_ARB_vertex_buffer_object
+    CRBufferObject *elementsBuffer = crStateGetCurrent(g_pStateTracker)->bufferobject.elementsBuffer;
+    packet_length += sizeof(GLint);
+    if (elementsBuffer && elementsBuffer->id)
+    {
+        /** @todo not sure it's possible, and not sure what to do*/
+        if (!elementsBuffer->data)
+        {
+            crWarning("crPackDrawElements: trying to use bound but empty elements buffer, ignoring.");
+            return;
+        }
+        indexsize = 0;
+    }
+    else
+#endif
+    {
+        indexsize = crPackElementsIndexSize(type);
+    }
+
+    packet_length += count * indexsize;
+
+    start_ptr = data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA_AI(GLenum, CR_DRAWELEMENTS_EXTEND_OPCODE );
+    WRITE_DATA_AI(GLenum, mode );
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLenum, type);
+    WRITE_DATA_AI(GLuint, (GLuint) ((uintptr_t) indices) );
+#ifdef CR_ARB_vertex_buffer_object
+    WRITE_DATA_AI(GLint, (GLint)(indexsize>0));
+#endif
+    if (indexsize>0)
+    {
+        crMemcpy(data_ptr, indices, count * indexsize);
+    }
+    crHugePacket(CR_EXTEND_OPCODE, start_ptr);
+    crPackFree(start_ptr);
+}
+
+void PACK_APIENTRY
+crPackDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count,
+                        GLenum type, const GLvoid *indices)
+{
+    unsigned char *data_ptr, *start_ptr;
+    int packet_length = sizeof(int) + sizeof(mode) + sizeof(start)
+        + sizeof(end) + sizeof(count) + sizeof(type) + sizeof(GLuint);
+    GLsizei indexsize;
+
+#ifdef CR_ARB_vertex_buffer_object
+    CRBufferObject *elementsBuffer = crStateGetCurrent(g_pStateTracker)->bufferobject.elementsBuffer;
+    packet_length += sizeof(GLint);
+    if (elementsBuffer && elementsBuffer->id)
+    {
+        /** @todo not sure it's possible, and not sure what to do*/
+        if (!elementsBuffer->data)
+        {
+            crWarning("crPackDrawElements: trying to use bound but empty elements buffer, ignoring.");
+            return;
+        }
+        indexsize = 0;
+    }
+    else
+#endif
+    {
+      indexsize = crPackElementsIndexSize(type);
+    }
+
+    packet_length += count * indexsize;
+
+    start_ptr = data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA_AI(GLenum, CR_DRAWRANGEELEMENTS_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLenum, mode);
+    WRITE_DATA_AI(GLuint, start);
+    WRITE_DATA_AI(GLuint, end);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLenum, type);
+    WRITE_DATA_AI(GLuint, (GLuint) ((uintptr_t) indices));
+#ifdef CR_ARB_vertex_buffer_object
+    WRITE_DATA_AI(GLint, (GLint) (indexsize>0));
+#endif
+    if (indexsize>0)
+    {
+        crMemcpy(data_ptr, indices, count * indexsize);
+    }
+    crHugePacket(CR_EXTEND_OPCODE, start_ptr);
+    crPackFree(start_ptr);
+}
+
+
+/**
+ * Expand glDrawElements into crPackBegin/Vertex/End, etc commands.
+ * Note: if mode==999, don't call glBegin/glEnd.
+ */
+void
+crPackExpandDrawElements(GLenum mode, GLsizei count, GLenum type,
+                         const GLvoid *indices, CRClientState *c, const GLfloat *pZva)
+{
+    int i;
+    GLubyte *p = (GLubyte *)indices;
+#ifdef CR_ARB_vertex_buffer_object
+    CRBufferObject *elementsBuffer = crStateGetCurrent(g_pStateTracker)->bufferobject.elementsBuffer;
+#endif
+
+    if (count < 0)
+    {
+        __PackError(__LINE__, __FILE__, GL_INVALID_VALUE,
+                                "crPackDrawElements(negative count)");
+        return;
+    }
+
+    if (mode > GL_POLYGON && mode != 999)
+    {
+        __PackError(__LINE__, __FILE__, GL_INVALID_ENUM,
+                                "crPackDrawElements(bad mode)");
+        return;
+    }
+
+    if (type != GL_UNSIGNED_BYTE &&
+            type != GL_UNSIGNED_SHORT &&
+            type != GL_UNSIGNED_INT)
+    {
+        __PackError(__LINE__, __FILE__, GL_INVALID_ENUM,
+                                "crPackDrawElements(bad type)");
+        return;
+    }
+
+#ifdef CR_ARB_vertex_buffer_object
+    if (elementsBuffer && elementsBuffer->data)
+    {
+        p = (unsigned char *)(elementsBuffer->data) + (uintptr_t)p;
+    }
+#endif
+
+    if (mode != 999)
+        crPackBegin(mode);
+
+    /*crDebug("crPackExpandDrawElements mode:0x%x, count:%d, type:0x%x", mode, count, type);*/
+
+    switch (type)
+    {
+        case GL_UNSIGNED_BYTE:
+            for (i=0; i<count; i++)
+            {
+                crPackExpandArrayElement((GLint) *p++, c, pZva);
+            }
+            break;
+        case GL_UNSIGNED_SHORT:
+            for (i=0; i<count; i++)
+            {
+                crPackExpandArrayElement((GLint) * (GLushort *) p, c, pZva);
+                p+=sizeof (GLushort);
+            }
+            break;
+        case GL_UNSIGNED_INT:
+            for (i=0; i<count; i++)
+            {
+                crPackExpandArrayElement((GLint) * (GLuint *) p, c, pZva);
+                p+=sizeof (GLuint);
+            }
+            break;
+        default:
+            crError( "this can't happen: array_spu.self.DrawElements" );
+            break;
+    }
+
+    if (mode != 999)
+        crPackEnd();
+}
+
+
+/**
+ * Convert a glDrawElements command into a sequence of ArrayElement() calls.
+ * NOTE: Caller must issue the glBegin/glEnd.
+ */
+void
+crPackUnrollDrawElements(GLsizei count, GLenum type,
+                                                 const GLvoid *indices)
+{
+    int i;
+
+    switch (type) {
+    case GL_UNSIGNED_BYTE:
+        {
+            const GLubyte *p = (const GLubyte *) indices;
+            for (i = 0; i < count; i++)
+                crPackArrayElement(p[i]);
+        }
+        break;
+    case GL_UNSIGNED_SHORT:
+        {
+            const GLushort *p = (const GLushort *) indices;
+            for (i = 0; i < count; i++)
+                crPackArrayElement(p[i]);
+        }
+        break;
+    case GL_UNSIGNED_INT:
+        {
+            const GLuint *p = (const GLuint *) indices;
+            for (i = 0; i < count; i++)
+                crPackArrayElement(p[i]);
+        }
+        break;
+    default:
+        __PackError(__LINE__, __FILE__, GL_INVALID_ENUM,
+                                 "crPackUnrollDrawElements(bad type)");
+    }
+}
+
+
+
+/*
+ * glDrawRangeElements, expanded into crPackBegin/Vertex/End/etc.
+ */
+void
+crPackExpandDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, CRClientState *c, const GLfloat *pZva)
+{
+    if (start>end)
+    {
+        crWarning("crPackExpandDrawRangeElements start>end (%d>%d)", start, end);
+        return;
+    }
+
+    crPackExpandDrawElements(mode, count, type, indices, c, pZva);
+}
+
+
+#ifdef CR_EXT_multi_draw_arrays
+/*
+ * Pack real DrawArrays commands.
+ */
+void PACK_APIENTRY
+crPackMultiDrawArraysEXT( GLenum mode, GLint *first, GLsizei *count,
+                                                    GLsizei primcount )
+{
+   GLint i;
+   for (i = 0; i < primcount; i++) {
+      if (count[i] > 0) {
+         crPackDrawArrays(mode, first[i], count[i]);
+      }
+   }
+}
+
+
+/*
+ * Pack with crPackBegin/Vertex/End/etc.
+ */
+void
+crPackExpandMultiDrawArraysEXT( GLenum mode, GLint *first, GLsizei *count,
+                                                                GLsizei primcount, CRClientState *c, const GLfloat *pZva )
+{
+   GLint i;
+   for (i = 0; i < primcount; i++) {
+      if (count[i] > 0) {
+         crPackExpandDrawArrays(mode, first[i], count[i], c, pZva);
+      }
+   }
+}
+
+
+/*
+ * Pack real DrawElements commands.
+ */
+void PACK_APIENTRY
+crPackMultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type,
+                            const GLvoid **indices, GLsizei primcount )
+{
+   GLint i;
+   for (i = 0; i < primcount; i++) {
+      if (count[i] > 0) {
+         crPackDrawElements(mode, count[i], type, indices[i]);
+      }
+   }
+}
+
+
+/*
+ * Pack with crPackBegin/Vertex/End/etc.
+ */
+void
+crPackExpandMultiDrawElementsEXT( GLenum mode, const GLsizei *count,
+                                  GLenum type, const GLvoid **indices,
+                                  GLsizei primcount, CRClientState *c, const GLfloat *pZva )
+{
+   GLint i;
+   for (i = 0; i < primcount; i++) {
+      if (count[i] > 0) {
+         crPackExpandDrawElements(mode, count[i], type, indices[i], c, pZva);
+      }
+   }
+}
+#endif /* CR_EXT_multi_draw_arrays */
+
+static int crPack_GetNumEnabledArrays(CRClientState *c, int *size)
+{
+    int i, count=0;
+
+    *size = 0;
+
+    if (c->array.v.enabled)
+    {
+        count++;
+        *size += c->array.v.bytesPerIndex;
+    }
+
+    if (c->array.c.enabled)
+    {
+        count++;
+        *size += c->array.c.bytesPerIndex;
+    }
+
+    if (c->array.f.enabled)
+    {
+        count++;
+        *size += c->array.f.bytesPerIndex;
+    }
+
+    if (c->array.s.enabled)
+    {
+        count++;
+        *size += c->array.s.bytesPerIndex;
+    }
+
+    if (c->array.e.enabled)
+    {
+        count++;
+        *size += c->array.e.bytesPerIndex;
+    }
+
+    if (c->array.i.enabled)
+    {
+        count++;
+        *size += c->array.i.bytesPerIndex;
+    }
+
+    if (c->array.n.enabled)
+    {
+        count++;
+        *size += c->array.n.bytesPerIndex;
+    }
+
+    for (i = 0 ; i < CR_MAX_TEXTURE_UNITS ; i++)
+    {
+        if (c->array.t[i].enabled)
+        {
+            count++;
+            *size += c->array.t[i].bytesPerIndex;
+        }
+    }
+
+    for (i = 0; i < CR_MAX_VERTEX_ATTRIBS; i++)
+    {
+        if (c->array.a[i].enabled)
+        {
+            count++;
+            *size += c->array.a[i].bytesPerIndex;
+        }
+    }
+
+    return count;
+}
+
+static void crPackLockClientPointer(GLint first, GLint count, unsigned char **ppData, int index, CRClientState *c)
+{
+    CRClientPointer *cp;
+    unsigned char *data_ptr = *ppData, *cptr;
+    GLint i;
+
+    cp = crStateGetClientPointerByIndex(index, &c->array);
+
+    if (cp->enabled)
+    {
+        if (cp->buffer && cp->buffer->id)
+        {
+            crWarning("crPackLockClientPointer called when there's VBO enabled!");
+        }
+
+        WRITE_DATA_AI(int, index);
+        cptr = cp->p + first*cp->stride;
+        if (cp->bytesPerIndex==cp->stride)
+        {
+            crMemcpy(data_ptr, cptr, count*cp->bytesPerIndex);
+            data_ptr += count*cp->bytesPerIndex;
+        }
+        else
+        {
+            for (i=0; i<count; ++i)
+            {
+                crMemcpy(data_ptr, cptr, cp->bytesPerIndex);
+                data_ptr += cp->bytesPerIndex;
+                cptr += cp->stride;
+            }
+        }
+        *ppData = data_ptr;
+    }
+}
+
+void PACK_APIENTRY crPackLockArraysEXT(GLint first, GLint count)
+{
+    CRContext *g = crStateGetCurrent(g_pStateTracker);
+    CRClientState *c = &g->client;
+    unsigned char *data_ptr, *start_ptr;
+    int packet_length = sizeof(int); /*extopcode*/
+    int vertex_size, i, numenabled;
+
+    packet_length += sizeof(first) + sizeof(count); /*params*/
+    numenabled = crPack_GetNumEnabledArrays(c, &vertex_size);
+    packet_length += sizeof(int) + numenabled*sizeof(int); /*numenabled + indices*/
+    packet_length += vertex_size * count; /*vertices data*/
+
+    start_ptr = data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA_AI(GLenum, CR_LOCKARRAYSEXT_EXTEND_OPCODE );
+    WRITE_DATA_AI(GLint, first);
+    WRITE_DATA_AI(GLint, count);
+    WRITE_DATA_AI(int, numenabled);
+    for (i=0; i<CRSTATECLIENT_MAX_VERTEXARRAYS; ++i)
+    {
+        crPackLockClientPointer(first, count, &data_ptr, i, c);
+    }
+    crHugePacket(CR_EXTEND_OPCODE, start_ptr);
+    crPackFree(start_ptr);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_clipplane.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_clipplane.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_clipplane.c	(revision 86648)
@@ -0,0 +1,23 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+
+void PACK_APIENTRY crPackClipPlane( GLenum plane, const GLdouble *equation )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof( plane ) + 4*sizeof(*equation);
+    CR_GET_BUFFERED_POINTER(pc, packet_length );
+    WRITE_DATA( 0, GLenum, plane );
+    WRITE_DOUBLE( 4, equation[0] );
+    WRITE_DOUBLE( 12, equation[1] );
+    WRITE_DOUBLE( 20, equation[2] );
+    WRITE_DOUBLE( 28, equation[3] );
+    WRITE_OPCODE( pc, CR_CLIPPLANE_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_context.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_context.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_context.c	(revision 86648)
@@ -0,0 +1,80 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+#include "cr_mem.h"
+#include "cr_string.h"
+
+
+/* XXX duplicated in unpack_context.c */
+#define DISPLAY_NAME_LEN 256
+
+#define WRITE_BYTES( offset, data, len ) \
+  crMemcpy( data_ptr + (offset), data, len )
+
+void PACK_APIENTRY
+crPackCreateContext( const char *dpyName, GLint visual, GLint shareCtx,
+                     GLint *return_value, int *writeback )
+{
+	char displayName[DISPLAY_NAME_LEN];
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+        int len = DISPLAY_NAME_LEN + 32;
+
+	/* clear the buffer, to silence valgrind */
+	crMemZero(displayName, DISPLAY_NAME_LEN);
+
+	if (dpyName) {
+		crStrncpy( displayName, dpyName, DISPLAY_NAME_LEN );
+		displayName[DISPLAY_NAME_LEN - 1] = 0;
+	}
+	else {
+		displayName[0] = 0;
+	}
+
+	CR_GET_BUFFERED_POINTER(pc, len);
+	WRITE_DATA( 0, GLint, len );
+	WRITE_DATA( 4, GLenum, CR_CREATECONTEXT_EXTEND_OPCODE );
+	WRITE_BYTES( 8, displayName, DISPLAY_NAME_LEN );
+	WRITE_DATA( DISPLAY_NAME_LEN + 8, GLint, visual );
+	WRITE_DATA( DISPLAY_NAME_LEN + 12, GLint, shareCtx );
+	WRITE_NETWORK_POINTER( DISPLAY_NAME_LEN + 16, (void *) return_value );
+	WRITE_NETWORK_POINTER( DISPLAY_NAME_LEN + 24, (void *) writeback );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+	CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackWindowCreate( const char *dpyName, GLint visBits, GLint *return_value, int *writeback )
+{
+	char displayName[DISPLAY_NAME_LEN];
+	CR_GET_PACKER_CONTEXT(pc);
+	unsigned char *data_ptr;
+
+	/* clear the buffer, to silence valgrind */
+	crMemZero(displayName, DISPLAY_NAME_LEN);
+
+	if (dpyName) {
+		crStrncpy( displayName, dpyName, DISPLAY_NAME_LEN );
+		displayName[DISPLAY_NAME_LEN - 1] = 0;
+	}
+	else {
+		displayName[0] = 0;
+	}
+
+	CR_GET_BUFFERED_POINTER(pc, DISPLAY_NAME_LEN + 28 );
+	WRITE_DATA( 0, GLint, 28 );
+	WRITE_DATA( 4, GLenum, CR_WINDOWCREATE_EXTEND_OPCODE );
+	WRITE_BYTES( 8, displayName, DISPLAY_NAME_LEN );
+	WRITE_DATA( DISPLAY_NAME_LEN + 8, GLint, visBits );
+	WRITE_NETWORK_POINTER( DISPLAY_NAME_LEN + 12, (void *) return_value );
+	WRITE_NETWORK_POINTER( DISPLAY_NAME_LEN + 20, (void *) writeback );
+	WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+	CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_current.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_current.py	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_current.py	(revision 86648)
@@ -0,0 +1,65 @@
+# Copyright (c) 2001, Stanford University
+# All rights reserved.
+#
+# See the file LICENSE.txt for information on redistributing this software.
+
+# This script generates the pack_current.c file.
+
+from __future__ import print_function
+import sys
+sys.path.append( "../glapi_parser" )
+import apiutil
+
+from pack_currenttypes import *
+
+apiutil.CopyrightC()
+
+print("""
+/* DO NOT EDIT - THIS FILE GENERATED BY THE pack_current.py SCRIPT */
+
+#include <memory.h>
+#include "packer.h"
+#include "state/cr_currentpointers.h"
+
+#include <stdio.h>
+
+void crPackOffsetCurrentPointers( int offset )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	GLnormal_p		*normal		= &(pc->current.c.normal);
+	GLcolor_p		*color		= &(pc->current.c.color);
+	GLsecondarycolor_p	*secondaryColor	= &(pc->current.c.secondaryColor);
+	GLtexcoord_p	*texCoord	= &(pc->current.c.texCoord);
+	GLindex_p		*index		= &(pc->current.c.index);
+	GLedgeflag_p	*edgeFlag	= &(pc->current.c.edgeFlag);
+	GLvertexattrib_p *vertexAttrib = &(pc->current.c.vertexAttrib);
+	GLfogcoord_p    *fogCoord   = &(pc->current.c.fogCoord);
+	int i;
+""")
+
+for k in sorted(current_fns.keys()):
+	name = '%s%s' % (k[:1].lower(),k[1:])
+	if 'array' in current_fns[k]:
+			print('\tfor (i = 0; i < %s; i++)' % current_fns[k]['array'])
+			print('\t{')
+	for type in current_fns[k]['types']:
+		for size in current_fns[k]['sizes']:
+			indent = ""
+			ptr = "%s->%s%d" % (name, type, size )
+			if 'array' in current_fns[k]:
+				ptr += "[i]"
+				indent = "\t"
+			print("%s\tif (%s)" % (indent, ptr))
+			print("%s\t\t%s += offset;" % (indent, ptr ))
+	if 'array' in current_fns[k]:
+		print('\t}')
+print("""
+}
+
+void crPackNullCurrentPointers( void )
+{
+	CR_GET_PACKER_CONTEXT(pc);
+	CRCurrentStateAttr	*c		= &(pc->current.c);
+""")
+print('\tmemset (c, 0, sizeof(CRCurrentStateAttr));')
+print("}")
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_currentheader.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_currentheader.py	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_currentheader.py	(revision 86648)
@@ -0,0 +1,66 @@
+# Copyright (c) 2001, Stanford University
+# All rights reserved.
+#
+# See the file LICENSE.txt for information on redistributing this software.
+
+# This script generates the include/state/cr_currentpointers.h file.
+
+from __future__ import print_function
+import sys
+sys.path.append( "../glapi_parser" )
+import apiutil
+
+from pack_currenttypes import *
+
+apiutil.CopyrightC()
+
+print("""
+/* DO NOT EDIT - THIS FILE GENERATED BY THE pack_currentheader.py SCRIPT */
+
+#ifndef CR_CURRENT_H
+#define CR_CURRENT_H
+
+#include "state/cr_limits.h"
+""")
+
+sorted_keys = sorted(current_fns.keys())
+
+for k in sorted_keys:
+	name = k.lower();
+	print("typedef struct {")
+	if 'array' in current_fns[k]:
+		print("\tconst unsigned char *ptr[%s];" % current_fns[k]['array'])
+	else:
+		print("\tconst unsigned char *ptr;")
+	for type in current_fns[k]['types']:
+		for size in current_fns[k]['sizes']:
+			if 'array' in current_fns[k]:
+				print("\tconst unsigned char *%s%d[%s];" % (type, size, current_fns[k]['array']))
+			else:
+				print("\tconst unsigned char *%s%d;" % (type, size))
+	print("} GL%s_p;\n" % name)
+
+print("typedef	struct attrs {")
+for k in sorted_keys:
+	name = k.lower()
+	field = '%s%s' % (k[:1].lower(),k[1:])
+	print("\tGL%s_p %s;" % (name,field))
+print("	} CRCurrentStateAttr;")
+	
+
+print("typedef struct {")
+print("""
+	CRCurrentStateAttr c;
+	unsigned char *vtx_op;
+	unsigned char *vtx_data;
+	unsigned char *begin_op;
+	unsigned char *begin_data;
+	unsigned int vtx_count;
+	unsigned int vtx_max;
+	unsigned int vtx_count_begin;
+	unsigned int attribsUsedMask;
+    unsigned int changedVertexAttrib;
+} CRCurrentStatePointers;
+
+#endif /* CR_CURRENT_H */
+""")
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_currenttypes.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_currenttypes.py	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_currenttypes.py	(revision 86648)
@@ -0,0 +1,142 @@
+# Copyright (c) 2001, Stanford University
+# All rights reserved.
+#
+# See the file LICENSE.txt for information on redistributing this software.
+
+# This file is imported by several other Python scripts
+
+current_fns = {
+	'Color': {
+		'types': ['b','ub','s','us','i','ui','f','d'],
+		'sizes': [3,4],
+		'default': [0,0,0,1],
+		'members': ['[0]', '[1]', '[2]', '[3]']
+	},
+	'SecondaryColor': {
+		'types': ['b','ub','s','us','i','ui','f','d'],
+		'sizes': [3],
+		'default': [0,0,0],
+		'members': ['[0]', '[1]', '[2]']
+	},
+	'Normal': {
+		'types': ['b','s','i','f','d'],
+		'sizes': [3],
+		'default': [0,0,0],
+		'members': ['[0]', '[1]', '[2]']
+	},
+	'TexCoord': {
+		'types': ['s','i','f','d'],
+		'sizes': [1,2,3,4],
+		'default': [0,0,0,1],
+		'members': ['[0]', '[1]', '[2]', '[3]'],
+		'array': 'CR_MAX_TEXTURE_UNITS'
+	},
+	'EdgeFlag': {
+		'types': ['l'],
+		'sizes': [1],
+		'default': [1],
+		'members': ['[0]']
+	},
+	'Index': {
+		'types': ['ub','s','i','f','d'],
+		'sizes': [1],
+		'default': [0],
+		'members': ['[0]']
+	},
+	'VertexAttrib': {
+		'types': ['s','f','d','b','i','ub','ui','us','Nub','Nus','Nui','Nb','Ns','Ni'],
+		'sizes': [1,2,3,4],
+		'default': [0,0,0,1],
+		'members': ['x', 'y', 'z', 'w'],
+		'array': 'CR_MAX_VERTEX_ATTRIBS'
+	},
+	'FogCoord': {
+		'types': ['f','d'],
+		'sizes': [1],
+		'default': [0],
+		'members': []
+	},
+}
+
+current_fns_new = {
+    'VertexAttrib': {
+        'types': ['s','f','d','b','i','ub','ui','us','Nub','Nus','Nui','Nb','Ns','Ni'],
+        'sizes': [1,2,3,4],
+        'default': [0,0,0,1],
+        'members': ['x', 'y', 'z', 'w'],
+        'array': 'CR_MAX_VERTEX_ATTRIBS'
+    },
+}
+
+current_vtx = {
+	'Vertex': {
+		'types': ['s','i','f','d'],
+		'sizes': [2,3,4],
+		'default': [0,0,0,1],
+		'members': ['x', 'y', 'z', 'w']
+	}
+}
+
+gltypes = {
+	'l': {
+		'type': 'GLboolean',
+		'size': 1
+	},
+	'b': {
+		'type': 'GLbyte',
+		'size': 1
+	},
+	'ub': {
+		'type': 'GLubyte',
+		'size': 1
+	},
+	's': {
+		'type': 'GLshort',
+		'size': 2
+	},
+	'us': {
+		'type': 'GLushort',
+		'size': 2
+	},
+	'i': {
+		'type': 'GLint',
+		'size': 4
+	},
+	'ui': {
+		'type': 'GLuint',
+		'size': 4
+	},
+	'f': {
+		'type': 'GLfloat',
+		'size': 4
+	},
+	'd': {
+		'type': 'GLdouble',
+		'size': 8
+	},
+
+	'Nb': {
+		'type': 'GLbyte',
+		'size': 1
+	},
+	'Nub': {
+		'type': 'GLubyte',
+		'size': 1
+	},
+	'Ns': {
+		'type': 'GLshort',
+		'size': 2
+	},
+	'Nus': {
+		'type': 'GLushort',
+		'size': 2
+	},
+	'Ni': {
+		'type': 'GLint',
+		'size': 4
+	},
+	'Nui': {
+		'type': 'GLuint',
+		'size': 4
+	}
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_error.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_error.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_error.c	(revision 86648)
@@ -0,0 +1,72 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+
+#include "cr_error.h"
+#include "cr_pack.h"
+#include "packer.h"
+
+#include <iprt/env.h>
+
+
+/*
+ * Set the error handler callback
+ */
+void crPackErrorFunction( CRPackContext *pc, CRPackErrorHandlerFunc function )
+{
+    pc->Error = function;
+}
+
+
+/*
+ * This function is called by the packer functions when it detects and
+ * OpenGL error.
+ */
+void __PackError( int line, const char *file, GLenum error, const char *info)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+
+    if (pc->Error)
+        pc->Error( line, file, error, info );
+
+    if (RTEnvExist("CR_DEBUG"))
+    {
+        char *glerr;
+
+        switch (error) {
+        case GL_NO_ERROR:
+            glerr = "GL_NO_ERROR";
+            break;
+        case GL_INVALID_VALUE:
+            glerr = "GL_INVALID_VALUE";
+            break;
+        case GL_INVALID_ENUM:
+            glerr = "GL_INVALID_ENUM";
+            break;
+        case GL_INVALID_OPERATION:
+            glerr = "GL_INVALID_OPERATION";
+            break;
+        case GL_STACK_OVERFLOW:
+            glerr = "GL_STACK_OVERFLOW";
+            break;
+        case GL_STACK_UNDERFLOW:
+            glerr = "GL_STACK_UNDERFLOW";
+            break;
+        case GL_OUT_OF_MEMORY:
+            glerr = "GL_OUT_OF_MEMORY";
+            break;
+        case GL_TABLE_TOO_LARGE:
+            glerr = "GL_TABLE_TOO_LARGE";
+            break;
+        default:
+            glerr = "unknown";
+            break;
+        }
+
+        crWarning( "GL error in packer: %s, line %d: %s: %s",
+                         file, line, glerr, info );
+    }
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_extensions.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_extensions.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_extensions.c	(revision 86648)
@@ -0,0 +1,37 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+
+int __packTexParameterNumParams( GLenum param )
+{
+    switch( param )
+    {
+#ifdef CR_EXT_texture_filter_anisotropic
+        case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+            return 1;
+#endif
+        default:
+            break;
+    }
+    return 0;
+}
+
+int __packFogParamsLength( GLenum param )
+{
+    static int one_param = sizeof( GLfloat );
+        (void) one_param;
+    switch( param )
+    {
+#ifdef CR_NV_fog_distance
+        case GL_FOG_DISTANCE_MODE_NV:
+            return one_param;
+#endif
+        default:
+            break;
+    }
+    return 0;
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_feedback.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_feedback.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_feedback.c	(revision 86648)
@@ -0,0 +1,28 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_error.h"
+
+void PACK_APIENTRY crPackFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer )
+{
+    (void) size;
+    (void) type;
+    (void) buffer;
+
+    crWarning("Packer wont pass FeedbackBuffer()\n");
+    crWarning("Try using the feedbackspu\n");
+}
+
+void PACK_APIENTRY crPackSelectBuffer( GLsizei size, GLuint *buffer )
+{
+    (void) size;
+    (void) buffer;
+
+    crWarning("Packer wont pass SelectBuffer()\n");
+    crWarning("Try using the feedbackspu\n");
+}
+
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_fence.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_fence.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_fence.c	(revision 86648)
@@ -0,0 +1,25 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+
+void PACK_APIENTRY
+crPackDeleteFencesNV(GLsizei n, const GLuint * fences)
+{
+    unsigned char *data_ptr;
+    int packet_length = sizeof(GLenum) + sizeof(n) + n * sizeof(*fences);
+
+    if( !fences )
+        return;
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA(0, GLenum, CR_DELETEFENCESNV_EXTEND_OPCODE);
+    WRITE_DATA(4, GLsizei, n);
+    crMemcpy(data_ptr + 8, fences, n * sizeof(*fences));
+    crHugePacket(CR_EXTEND_OPCODE, data_ptr);
+    crPackFree(data_ptr);
+}
+
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_fog.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_fog.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_fog.c	(revision 86648)
@@ -0,0 +1,69 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+
+static GLboolean __handleFogData( GLenum pname, const GLfloat *params )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    int params_length = 0;
+    int packet_length = sizeof( int ) + sizeof( pname );
+    unsigned char *data_ptr;
+    switch( pname )
+    {
+        case GL_FOG_MODE:
+        case GL_FOG_DENSITY:
+        case GL_FOG_START:
+        case GL_FOG_END:
+        case GL_FOG_INDEX:
+            params_length = sizeof( *params );
+            break;
+        case GL_FOG_COLOR:
+            params_length = 4*sizeof( *params );
+            break;
+        default:
+            params_length = __packFogParamsLength( pname );
+            if (!params_length)
+            {
+                char msg[100];
+                sprintf(msg, "Invalid pname in Fog: %d", (int) pname );
+                __PackError( __LINE__, __FILE__, GL_INVALID_ENUM, msg);
+                return GL_FALSE;
+            }
+            break;
+    }
+    packet_length += params_length;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length );
+    WRITE_DATA( 0, int, packet_length );
+    WRITE_DATA( 4, GLenum, pname );
+    WRITE_DATA( 8, GLfloat, params[0] );
+    if (packet_length > 12)
+    {
+        WRITE_DATA( 12, GLfloat, params[1] );
+        WRITE_DATA( 16, GLfloat, params[2] );
+        WRITE_DATA( 20, GLfloat, params[3] );
+    }
+    return GL_TRUE;
+}
+
+void PACK_APIENTRY crPackFogfv(GLenum pname, const GLfloat *params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    if (__handleFogData( pname, params ))
+        WRITE_OPCODE( pc, CR_FOGFV_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackFogiv(GLenum pname, const GLint *params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    /* floats and ints are the same size, so the packing should be the same */
+    if (__handleFogData( pname, (const GLfloat *) params ))
+        WRITE_OPCODE( pc, CR_FOGIV_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c	(revision 86648)
@@ -0,0 +1,56 @@
+/* $Id$ */
+
+/** @file
+ * VBox OpenGL: EXT_framebuffer_object
+ */
+
+/*
+ * Copyright (C) 2009-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include "packer.h"
+#include "cr_error.h"
+#include "cr_string.h"
+
+void PACK_APIENTRY
+crPackDeleteRenderbuffersEXT(GLsizei n, const GLuint * renderbuffers)
+{
+    unsigned char *data_ptr;
+    int packet_length = sizeof(GLenum) + sizeof(n) + n*sizeof(*renderbuffers);
+
+    if (!renderbuffers)
+        return;
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA(0, GLenum, CR_DELETERENDERBUFFERSEXT_EXTEND_OPCODE);
+    WRITE_DATA(4, GLsizei, n);
+    crMemcpy(data_ptr + 8, renderbuffers, n* sizeof(*renderbuffers));
+    crHugePacket(CR_EXTEND_OPCODE, data_ptr);
+    crPackFree(data_ptr);
+}
+
+void PACK_APIENTRY
+crPackDeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers)
+{
+    unsigned char *data_ptr;
+    int packet_length = sizeof(GLenum) + sizeof(n) + n*sizeof(*framebuffers);
+
+    if (!framebuffers)
+        return;
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA(0, GLenum, CR_DELETEFRAMEBUFFERSEXT_EXTEND_OPCODE);
+    WRITE_DATA(4, GLsizei, n);
+    crMemcpy(data_ptr + 8, framebuffers, n* sizeof(*framebuffers));
+    crHugePacket(CR_EXTEND_OPCODE, data_ptr);
+    crPackFree(data_ptr);
+}
+
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_header.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_header.py	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_header.py	(revision 86648)
@@ -0,0 +1,88 @@
+# Copyright (c) 2001, Stanford University
+# All rights reserved.
+#
+# See the file LICENSE.txt for information on redistributing this software.
+
+# This script generates the cr/include/cr_packfunctions.h file from the
+# gl_header.parsed file.
+
+from __future__ import print_function
+import sys
+import string
+
+import apiutil
+
+
+apiutil.CopyrightC()
+
+print("""#ifndef CR_PACKFUNCTIONS_H
+#define CR_PACKFUNCTIONS_H
+
+/* DO NOT EDIT - THIS FILE GENERATED BY THE pack_header.py SCRIPT */
+
+/* Prototypes for the OpenGL packer functions in packer.c and pack_bbox.c */
+
+#include "chromium.h"
+#include "state/cr_client.h"
+#include "cr_pack.h"
+
+#ifdef WINDOWS
+#define PACK_APIENTRY __stdcall
+#else
+#define PACK_APIENTRY
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+""")
+
+keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
+
+
+for func_name in keys:
+	if ("pack" in apiutil.ChromiumProps(func_name) or
+		"extpack" in apiutil.ChromiumProps(func_name) or
+		apiutil.NonVectorFunction(func_name) != '' or
+		apiutil.FindSpecial('packer', func_name)):
+
+		# OK, generate a crPackFooBar() prototype for this function
+		return_type = apiutil.ReturnType(func_name)
+		args = apiutil.Parameters(func_name)
+		if return_type != 'void':
+			if apiutil.IsPointer(return_type):
+				args.append(("return_value", return_type, 0))
+			else:
+				args.append(("return_value", return_type + "*", 0))
+		elif "pixelstore" in apiutil.Properties(func_name):
+			args.append(("packstate", "const CRPixelPackState *", 0))
+
+		if "get" in apiutil.Properties(func_name):
+			args.append(("writeback", "int *", 0))
+
+		print('void PACK_APIENTRY crPack%s(%s);' % (func_name, apiutil.MakeDeclarationStringWithContext('CR_PACKER_CONTEXT', args)))
+
+
+
+# Now generate special BBOX, COUNT, SWAP variations on the glVertex and
+# glVertexAttrib functions.
+for func_name in keys:
+	if (func_name[0:6] == "Vertex" and
+		"pervertex" in apiutil.Properties(func_name) and
+		("pack" in apiutil.ChromiumProps(func_name) or
+		 apiutil.NonVectorFunction(func_name) != '')):
+
+		assert apiutil.ReturnType(func_name) == "void"
+
+		args = apiutil.Parameters(func_name)
+		print('void PACK_APIENTRY crPack%sBBOX(%s);' % (func_name, apiutil.MakeDeclarationString(args)))
+		print('void PACK_APIENTRY crPack%sBBOX_COUNT(%s);' % (func_name, apiutil.MakeDeclarationString(args)))
+
+
+print("""
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_PACKFUNCTIONS_H */
+""")
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_init.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_init.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_init.c	(revision 86648)
@@ -0,0 +1,51 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "cr_error.h"
+#include "cr_mem.h"
+#include "packer.h"
+#include <stdio.h>
+
+CRtsd _PackerTSD;
+int cr_packer_globals;  /* dummy - for the sake of packer.def */
+uint32_t cr_packer_cmd_blocks_enabled = 0;
+
+CRPackContext *crPackNewContext(void)
+{
+    CRPackContext *pc = crCalloc(sizeof(CRPackContext));
+    if (!pc)
+        return NULL;
+    crInitMutex(&pc->mutex);
+    pc->u32CmdBlockState = 0;
+    pc->Flush = NULL;
+    pc->SendHuge = NULL;
+    pc->updateBBOX = 0;
+    return pc;
+}
+
+void crPackDeleteContext(CRPackContext *pc)
+{
+    crFreeMutex(&pc->mutex);
+    crFree(pc);
+}
+
+/* Set packing context for the calling thread */
+void crPackSetContext( CRPackContext *pc )
+{
+    crSetTSD( &_PackerTSD, pc );
+}
+
+
+/* Return packing context for the calling thread */
+CRPackContext *crPackGetContext( void )
+{
+    return (CRPackContext *) crGetTSD( &_PackerTSD );
+}
+
+void crPackCapsSet(uint32_t u32Caps)
+{
+    cr_packer_cmd_blocks_enabled = (u32Caps & (CR_VBOX_CAP_CMDBLOCKS_FLUSH | CR_VBOX_CAP_CMDBLOCKS));
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_lights.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_lights.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_lights.c	(revision 86648)
@@ -0,0 +1,123 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_error.h"
+
+static GLboolean __handleLightData(GLenum light, GLenum pname, const GLfloat *params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned int packet_length = sizeof(int) + sizeof(light) + sizeof(pname);
+    unsigned int params_length = 0;
+    unsigned char *data_ptr;
+    switch(pname)
+    {
+        case GL_AMBIENT:
+        case GL_DIFFUSE:
+        case GL_SPECULAR:
+        case GL_POSITION:
+            params_length = 4*sizeof(*params);
+            break;
+        case GL_SPOT_DIRECTION:
+            params_length = 3*sizeof(*params);
+            break;
+        case GL_SPOT_EXPONENT:
+        case GL_SPOT_CUTOFF:
+        case GL_CONSTANT_ATTENUATION:
+        case GL_LINEAR_ATTENUATION:
+        case GL_QUADRATIC_ATTENUATION:
+            params_length = sizeof(*params);
+            break;
+        default:
+            __PackError(__LINE__, __FILE__, GL_INVALID_ENUM,
+                                     "crPackLight(bad pname)");
+            return GL_FALSE;
+    }
+    packet_length += params_length;
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(sizeof(int) + 0, GLenum, light);
+    WRITE_DATA(sizeof(int) + 4, GLenum, pname);
+    WRITE_DATA(sizeof(int) + 8, GLfloat, params[0]);
+    if (params_length > sizeof(*params)) 
+    {
+        WRITE_DATA(sizeof(int) + 12, GLfloat, params[1]);
+        WRITE_DATA(sizeof(int) + 16, GLfloat, params[2]);
+    }
+    if (params_length > 3*sizeof(*params)) 
+    {
+        WRITE_DATA(sizeof(int) + 20, GLfloat, params[3]);
+    }
+    return GL_TRUE;
+}
+
+void PACK_APIENTRY crPackLightfv (GLenum light, GLenum pname, const GLfloat *params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    if (__handleLightData(light, pname, params))
+        WRITE_OPCODE(pc, CR_LIGHTFV_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackLightiv (GLenum light, GLenum pname, const GLint *params)
+{
+    /* floats and ints are the same size, so the packing should be the same */
+    CR_GET_PACKER_CONTEXT(pc);
+    if (__handleLightData(light, pname, (const GLfloat *) params))
+        WRITE_OPCODE(pc, CR_LIGHTIV_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+static GLboolean __handleLightModelData(GLenum pname, const GLfloat *params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned int packet_length = sizeof(int) + sizeof(pname);
+    unsigned int params_length = 0;
+    unsigned char *data_ptr;
+    switch(pname)
+    {
+        case GL_LIGHT_MODEL_AMBIENT:
+            params_length = 4*sizeof(*params);
+            break;
+        case GL_LIGHT_MODEL_TWO_SIDE:
+        case GL_LIGHT_MODEL_LOCAL_VIEWER:
+            params_length = sizeof(*params);
+            break;
+        default:
+            __PackError(__LINE__, __FILE__, GL_INVALID_ENUM,
+                                     "crPackLightModel(bad pname)");
+            return GL_FALSE;
+    }
+    packet_length += params_length;
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(sizeof(int) + 0, GLenum, pname);
+    WRITE_DATA(sizeof(int) + 4, GLfloat, params[0]);
+    if (params_length > sizeof(*params))
+    {
+        WRITE_DATA(sizeof(int) + 8, GLfloat, params[1]);
+        WRITE_DATA(sizeof(int) + 12, GLfloat, params[2]);
+        WRITE_DATA(sizeof(int) + 16, GLfloat, params[3]);
+    }
+    return GL_TRUE;
+}
+
+void PACK_APIENTRY crPackLightModelfv (GLenum pname, const GLfloat *params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    if (__handleLightModelData(pname, params))
+        WRITE_OPCODE(pc, CR_LIGHTMODELFV_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackLightModeliv (GLenum pname, const GLint *params)
+{
+    /* floats and ints are the same size, so the packing should be the same */
+    CR_GET_PACKER_CONTEXT(pc);
+    if (__handleLightModelData(pname, (const GLfloat *) params))
+        WRITE_OPCODE(pc, CR_LIGHTMODELIV_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_lists.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_lists.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_lists.c	(revision 86648)
@@ -0,0 +1,96 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_error.h"
+#include "cr_mem.h"
+
+static int __gl_CallListsNumBytes( GLenum type )
+{
+    switch( type )
+    {
+        case GL_BYTE:
+        case GL_UNSIGNED_BYTE:
+        case GL_2_BYTES:
+            return 1;
+        case GL_SHORT:
+        case GL_UNSIGNED_SHORT:
+        case GL_3_BYTES:
+            return 2;
+        case GL_INT:
+        case GL_UNSIGNED_INT:
+        case GL_FLOAT:
+        case GL_4_BYTES:
+            return 4;
+        default:
+            return -1;
+    }
+}
+
+void PACK_APIENTRY crPackCallLists(GLint n, GLenum type, 
+        const GLvoid *lists )
+{
+    unsigned char *data_ptr;
+    int packet_length;
+
+    int num_bytes = __gl_CallListsNumBytes( type ) * n;
+    if (num_bytes < 0)
+    {
+        __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
+                                 "crPackCallLists(bad type)" );
+        return;
+    }
+
+    packet_length = 
+        sizeof( n ) + 
+        sizeof( type ) + 
+        num_bytes;
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+    WRITE_DATA( 0, GLint, n );
+    WRITE_DATA( 4, GLenum, type );
+    crMemcpy( data_ptr + 8, lists, num_bytes );
+
+    crHugePacket( CR_CALLLISTS_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackNewList( GLuint list, GLenum mode )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+
+    if (CR_CMDBLOCK_IS_STARTED(pc, CRPACKBLOCKSTATE_OP_NEWLIST))
+    {
+        WARN(("recursive NewList?"));
+        return;
+    }
+
+    CR_CMDBLOCK_BEGIN( pc, CRPACKBLOCKSTATE_OP_NEWLIST );
+    CR_GET_BUFFERED_POINTER_NO_BEGINEND_FLUSH( pc, 16, GL_FALSE );
+    WRITE_DATA( 0, GLint, 16 );
+    WRITE_DATA( 4, GLenum, CR_NEWLIST_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLuint, list );
+    WRITE_DATA( 12, GLenum, mode );
+    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    pc->buffer.in_List = GL_TRUE;
+    pc->buffer.holds_List = GL_TRUE;
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackEndList( void )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    CR_GET_BUFFERED_POINTER( pc, 8 );
+    WRITE_DATA( 0, GLint, 8 );
+    WRITE_DATA( 4, GLenum, CR_ENDLIST_EXTEND_OPCODE );
+    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    pc->buffer.in_List = GL_FALSE;
+    CR_CMDBLOCK_END( pc, CRPACKBLOCKSTATE_OP_NEWLIST );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_map.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_map.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_map.c	(revision 86648)
@@ -0,0 +1,294 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+#include "cr_error.h"
+#include "cr_mem.h"
+
+/* Note -- for these packets, the ustride and vstride are implicit,
+ * and are computed into the packet instead of copied.
+ */
+
+static int __gl_Map2NumComponents( GLenum target )
+{
+    switch( target )
+    {
+    case GL_MAP2_VERTEX_3:
+    case GL_MAP2_NORMAL:
+    case GL_MAP2_TEXTURE_COORD_3:
+        return 3;
+    case GL_MAP2_VERTEX_4:
+    case GL_MAP2_COLOR_4:
+    case GL_MAP2_TEXTURE_COORD_4:
+    case GL_MAP1_VERTEX_ATTRIB0_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB1_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB2_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB3_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB4_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB5_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB6_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB7_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB8_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB9_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB10_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB11_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB12_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB13_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB14_4_NV:
+    case GL_MAP1_VERTEX_ATTRIB15_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB0_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB1_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB2_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB3_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB4_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB5_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB6_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB7_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB8_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB9_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB10_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB11_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB12_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB13_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB14_4_NV:
+    case GL_MAP2_VERTEX_ATTRIB15_4_NV:
+        return 4;
+    case GL_MAP2_INDEX:
+    case GL_MAP2_TEXTURE_COORD_1:
+        return 1;
+    case GL_MAP2_TEXTURE_COORD_2:
+        return 2;
+    default:
+        return -1;
+    }
+}
+
+static int __gl_Map1NumComponents( GLenum target )
+{
+    switch( target )
+    {
+    case GL_MAP1_VERTEX_3:
+    case GL_MAP1_NORMAL:
+    case GL_MAP1_TEXTURE_COORD_3:
+        return 3;
+    case GL_MAP1_VERTEX_4:
+    case GL_MAP1_COLOR_4:
+    case GL_MAP1_TEXTURE_COORD_4:
+        return 4;
+    case GL_MAP1_INDEX:
+    case GL_MAP1_TEXTURE_COORD_1:
+        return 1;
+    case GL_MAP1_TEXTURE_COORD_2:
+        return 2;
+    default:
+        return -1;
+    }
+}
+
+void PACK_APIENTRY crPackMap2d(GLenum target, GLdouble u1, 
+        GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, 
+        GLint vstride, GLint vorder, const GLdouble *points)
+{
+    unsigned char *data_ptr;
+    int u,v;
+    GLdouble *dest_data, *src_data;
+    int packet_length = 
+        sizeof( target ) + 
+        sizeof( u1 ) +
+        sizeof( u2 ) +
+        sizeof( uorder ) +
+        sizeof( ustride ) +
+        sizeof( v1 ) +
+        sizeof( v2 ) + 
+        sizeof( vorder ) +
+        sizeof( vstride );
+
+    int num_components = __gl_Map2NumComponents( target );
+    if (num_components < 0)
+    {
+        __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
+                                 "crPackMap2d(bad target)" );
+        return;
+    }
+
+    packet_length += num_components*uorder*vorder*sizeof( *points );
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+
+    WRITE_DATA( 0, GLenum, target );
+    WRITE_DOUBLE( 4, u1 );
+    WRITE_DOUBLE( 12, u2 );
+    WRITE_DATA( 20, GLint, num_components );
+    WRITE_DATA( 24, GLint, uorder );
+    WRITE_DOUBLE( 28, v1 );
+    WRITE_DOUBLE( 36, v2 );
+    WRITE_DATA( 44, GLint, num_components*uorder );
+    WRITE_DATA( 48, GLint, vorder );
+
+    dest_data = (GLdouble *) (data_ptr + 52);
+    src_data = (GLdouble *) points;
+    for (v = 0 ; v < vorder ; v++)
+    {
+        for (u = 0 ; u < uorder ; u++)
+        {
+            crMemcpy( dest_data, src_data, num_components * sizeof( *points ) );
+            dest_data += num_components;
+            src_data += ustride;
+        }
+        src_data += vstride - ustride*uorder;
+    }
+
+    crHugePacket( CR_MAP2D_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackMap2f(GLenum target, GLfloat u1, 
+        GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, 
+        GLint vstride, GLint vorder, const GLfloat *points)
+{
+    unsigned char *data_ptr;
+    int u,v;
+    GLfloat *dest_data, *src_data;
+    int packet_length = 
+        sizeof( target ) + 
+        sizeof( u1 ) +
+        sizeof( u2 ) +
+        sizeof( uorder ) +
+        sizeof( ustride ) +
+        sizeof( v1 ) +
+        sizeof( v2 ) + 
+        sizeof( vorder ) +
+        sizeof( vstride );
+
+    int num_components = __gl_Map2NumComponents( target );
+    if (num_components < 0)
+    {
+        __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
+                                 "crPackMap2f(bad target)" );
+        return;
+    }
+
+    packet_length += num_components*uorder*vorder*sizeof( *points );
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+
+    WRITE_DATA( 0, GLenum, target );
+    WRITE_DATA( 4, GLfloat, u1 );
+    WRITE_DATA( 8, GLfloat, u2 );
+    WRITE_DATA( 12, GLint, num_components );
+    WRITE_DATA( 16, GLint, uorder );
+    WRITE_DATA( 20, GLfloat, v1 );
+    WRITE_DATA( 24, GLfloat, v2 );
+    WRITE_DATA( 28, GLint, num_components*uorder );
+    WRITE_DATA( 32, GLint, vorder );
+
+    dest_data = (GLfloat *) (data_ptr + 36);
+    src_data = (GLfloat *) points;
+    for (v = 0 ; v < vorder ; v++)
+    {
+        for (u = 0 ; u < uorder ; u++)
+        {
+            crMemcpy( dest_data, src_data, num_components * sizeof( *points ) );
+            dest_data += num_components;
+            src_data += ustride;
+        }
+        src_data += vstride - ustride*uorder;
+    }
+
+    crHugePacket( CR_MAP2F_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackMap1d( GLenum target, GLdouble u1,
+        GLdouble u2, GLint stride, GLint order, const GLdouble *points )
+{
+    unsigned char *data_ptr;
+    int packet_length = 
+        sizeof( target ) + 
+        sizeof( u1 ) +
+        sizeof( u2 ) + 
+        sizeof( stride ) + 
+        sizeof( order );
+
+    int num_components = __gl_Map1NumComponents( target );
+    GLdouble *src_data, *dest_data;
+    int u;
+
+    if (num_components < 0)
+    {
+        __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
+                                 "crPackMap1d(bad target)" );
+        return;
+    }
+
+    packet_length += num_components * order * sizeof( *points );
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+
+    WRITE_DATA( 0, GLenum, target );
+    WRITE_DOUBLE( 4, u1 );
+    WRITE_DOUBLE( 12, u2 );
+    WRITE_DATA( 20, GLint, num_components );
+    WRITE_DATA( 24, GLint, order );
+
+    dest_data = (GLdouble *) (data_ptr + 28);
+    src_data = (GLdouble *) points;
+    for (u = 0 ; u < order ; u++)
+    {
+        crMemcpy( dest_data, src_data, num_components * sizeof( *points ) );
+        dest_data += num_components;
+        src_data += stride;
+    }
+
+    crHugePacket( CR_MAP1D_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackMap1f( GLenum target, GLfloat u1,
+        GLfloat u2, GLint stride, GLint order, const GLfloat *points )
+{
+    unsigned char *data_ptr;
+    int packet_length = 
+        sizeof( target ) + 
+        sizeof( u1 ) +
+        sizeof( u2 ) + 
+        sizeof( stride ) + 
+        sizeof( order );
+
+    int num_components = __gl_Map1NumComponents( target );
+    GLfloat *src_data, *dest_data;
+    int u;
+
+    if (num_components < 0)
+    {
+        __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
+                                 "crPackMap1f(bad target)" );
+        return;
+    }
+
+    packet_length += num_components * order * sizeof( *points );
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+
+    WRITE_DATA( 0, GLenum, target );
+    WRITE_DATA( 4, GLfloat, u1 );
+    WRITE_DATA( 8, GLfloat, u2 );
+    WRITE_DATA( 12, GLint, num_components );
+    WRITE_DATA( 16, GLint, order );
+
+    dest_data = (GLfloat *) (data_ptr + 20);
+    src_data = (GLfloat *) points;
+    for (u = 0 ; u < order ; u++)
+    {
+        crMemcpy( dest_data, src_data, num_components * sizeof( *points ) );
+        dest_data += num_components;
+        src_data += stride;
+    }
+
+    crHugePacket( CR_MAP1F_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_materials.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_materials.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_materials.c	(revision 86648)
@@ -0,0 +1,68 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_error.h"
+
+static void __handleMaterialData( GLenum face, GLenum pname, const GLfloat *params )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned int packet_length = sizeof( int ) + sizeof( face ) + sizeof( pname );
+    unsigned int params_length = 0;
+    unsigned char *data_ptr;
+    switch( pname )
+    {
+        case GL_AMBIENT:
+        case GL_DIFFUSE:
+        case GL_SPECULAR:
+        case GL_EMISSION:
+        case GL_AMBIENT_AND_DIFFUSE:
+            params_length = 4*sizeof( *params );
+            break;
+        case GL_COLOR_INDEXES:
+            params_length = 3*sizeof( *params );
+            break;
+        case GL_SHININESS:
+            params_length = sizeof( *params );
+            break;
+        default:
+            __PackError(__LINE__, __FILE__, GL_INVALID_ENUM, "glMaterial(pname)");
+            return;
+    }
+    packet_length += params_length;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length );
+    WRITE_DATA( 0, int, packet_length );
+    WRITE_DATA( sizeof( int ) + 0, GLenum, face );
+    WRITE_DATA( sizeof( int ) + 4, GLenum, pname );
+    WRITE_DATA( sizeof( int ) + 8, GLfloat, params[0] );
+    if (params_length > sizeof( *params )) 
+    {
+        WRITE_DATA( sizeof( int ) + 12, GLfloat, params[1] );
+        WRITE_DATA( sizeof( int ) + 16, GLfloat, params[2] );
+    }
+    if (packet_length > 3*sizeof( *params ) ) 
+    {
+        WRITE_DATA( sizeof( int ) + 20, GLfloat, params[3] );
+    }
+}
+
+void PACK_APIENTRY crPackMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    __handleMaterialData( face, pname, params );
+    WRITE_OPCODE( pc, CR_MATERIALFV_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackMaterialiv(GLenum face, GLenum pname, const GLint *params)
+{
+    /* floats and ints are the same size, so the packing should be the same */
+    CR_GET_PACKER_CONTEXT(pc);
+    __handleMaterialData( face, pname, (const GLfloat *) params );
+    WRITE_OPCODE( pc, CR_MATERIALIV_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_matrices.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_matrices.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_matrices.c	(revision 86648)
@@ -0,0 +1,224 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+
+void PACK_APIENTRY crPackMultMatrixd(const GLdouble *m)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = 16*sizeof(*m);
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DOUBLE(0*sizeof(double), m[ 0]);
+    WRITE_DOUBLE(1*sizeof(double), m[ 1]);
+    WRITE_DOUBLE(2*sizeof(double), m[ 2]);
+    WRITE_DOUBLE(3*sizeof(double), m[ 3]);
+    WRITE_DOUBLE(4*sizeof(double), m[ 4]);
+    WRITE_DOUBLE(5*sizeof(double), m[ 5]);
+    WRITE_DOUBLE(6*sizeof(double), m[ 6]);
+    WRITE_DOUBLE(7*sizeof(double), m[ 7]);
+    WRITE_DOUBLE(8*sizeof(double), m[ 8]);
+    WRITE_DOUBLE(9*sizeof(double), m[ 9]);
+    WRITE_DOUBLE(10*sizeof(double), m[10]);
+    WRITE_DOUBLE(11*sizeof(double), m[11]);
+    WRITE_DOUBLE(12*sizeof(double), m[12]);
+    WRITE_DOUBLE(13*sizeof(double), m[13]);
+    WRITE_DOUBLE(14*sizeof(double), m[14]);
+    WRITE_DOUBLE(15*sizeof(double), m[15]);
+    WRITE_OPCODE(pc, CR_MULTMATRIXD_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackMultMatrixf(const GLfloat *m)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = 16*sizeof(*m);
+    CR_GET_BUFFERED_POINTER(pc, packet_length); 
+    WRITE_DATA(0*sizeof(GLfloat), GLfloat, m[ 0]);
+    WRITE_DATA(1*sizeof(GLfloat), GLfloat, m[ 1]);
+    WRITE_DATA(2*sizeof(GLfloat), GLfloat, m[ 2]);
+    WRITE_DATA(3*sizeof(GLfloat), GLfloat, m[ 3]);
+    WRITE_DATA(4*sizeof(GLfloat), GLfloat, m[ 4]);
+    WRITE_DATA(5*sizeof(GLfloat), GLfloat, m[ 5]);
+    WRITE_DATA(6*sizeof(GLfloat), GLfloat, m[ 6]);
+    WRITE_DATA(7*sizeof(GLfloat), GLfloat, m[ 7]);
+    WRITE_DATA(8*sizeof(GLfloat), GLfloat, m[ 8]);
+    WRITE_DATA(9*sizeof(GLfloat), GLfloat, m[ 9]);
+    WRITE_DATA(10*sizeof(GLfloat), GLfloat, m[10]);
+    WRITE_DATA(11*sizeof(GLfloat), GLfloat, m[11]);
+    WRITE_DATA(12*sizeof(GLfloat), GLfloat, m[12]);
+    WRITE_DATA(13*sizeof(GLfloat), GLfloat, m[13]);
+    WRITE_DATA(14*sizeof(GLfloat), GLfloat, m[14]);
+    WRITE_DATA(15*sizeof(GLfloat), GLfloat, m[15]);
+    WRITE_OPCODE(pc, CR_MULTMATRIXF_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackLoadMatrixd(const GLdouble *m)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = 16*sizeof(*m);
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DOUBLE(0*sizeof(double), m[ 0]);
+    WRITE_DOUBLE(1*sizeof(double), m[ 1]);
+    WRITE_DOUBLE(2*sizeof(double), m[ 2]);
+    WRITE_DOUBLE(3*sizeof(double), m[ 3]);
+    WRITE_DOUBLE(4*sizeof(double), m[ 4]);
+    WRITE_DOUBLE(5*sizeof(double), m[ 5]);
+    WRITE_DOUBLE(6*sizeof(double), m[ 6]);
+    WRITE_DOUBLE(7*sizeof(double), m[ 7]);
+    WRITE_DOUBLE(8*sizeof(double), m[ 8]);
+    WRITE_DOUBLE(9*sizeof(double), m[ 9]);
+    WRITE_DOUBLE(10*sizeof(double), m[10]);
+    WRITE_DOUBLE(11*sizeof(double), m[11]);
+    WRITE_DOUBLE(12*sizeof(double), m[12]);
+    WRITE_DOUBLE(13*sizeof(double), m[13]);
+    WRITE_DOUBLE(14*sizeof(double), m[14]);
+    WRITE_DOUBLE(15*sizeof(double), m[15]);
+    WRITE_OPCODE(pc, CR_LOADMATRIXD_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackLoadMatrixf(const GLfloat *m)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = 16*sizeof(*m);
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0*sizeof(GLfloat), GLfloat, m[ 0]);
+    WRITE_DATA(1*sizeof(GLfloat), GLfloat, m[ 1]);
+    WRITE_DATA(2*sizeof(GLfloat), GLfloat, m[ 2]);
+    WRITE_DATA(3*sizeof(GLfloat), GLfloat, m[ 3]);
+    WRITE_DATA(4*sizeof(GLfloat), GLfloat, m[ 4]);
+    WRITE_DATA(5*sizeof(GLfloat), GLfloat, m[ 5]);
+    WRITE_DATA(6*sizeof(GLfloat), GLfloat, m[ 6]);
+    WRITE_DATA(7*sizeof(GLfloat), GLfloat, m[ 7]);
+    WRITE_DATA(8*sizeof(GLfloat), GLfloat, m[ 8]);
+    WRITE_DATA(9*sizeof(GLfloat), GLfloat, m[ 9]);
+    WRITE_DATA(10*sizeof(GLfloat), GLfloat, m[10]);
+    WRITE_DATA(11*sizeof(GLfloat), GLfloat, m[11]);
+    WRITE_DATA(12*sizeof(GLfloat), GLfloat, m[12]);
+    WRITE_DATA(13*sizeof(GLfloat), GLfloat, m[13]);
+    WRITE_DATA(14*sizeof(GLfloat), GLfloat, m[14]);
+    WRITE_DATA(15*sizeof(GLfloat), GLfloat, m[15]);
+    WRITE_OPCODE(pc, CR_LOADMATRIXF_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackMultTransposeMatrixdARB(const GLdouble *m)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = 16*sizeof(*m) + sizeof(GLint) + sizeof(GLenum);
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, GLint, packet_length);
+    WRITE_DATA(4, GLenum, CR_MULTTRANSPOSEMATRIXDARB_EXTEND_OPCODE);
+    WRITE_DOUBLE(8 + 0*sizeof(double), m[ 0]);
+    WRITE_DOUBLE(8 + 1*sizeof(double), m[ 1]);
+    WRITE_DOUBLE(8 + 2*sizeof(double), m[ 2]);
+    WRITE_DOUBLE(8 + 3*sizeof(double), m[ 3]);
+    WRITE_DOUBLE(8 + 4*sizeof(double), m[ 4]);
+    WRITE_DOUBLE(8 + 5*sizeof(double), m[ 5]);
+    WRITE_DOUBLE(8 + 6*sizeof(double), m[ 6]);
+    WRITE_DOUBLE(8 + 7*sizeof(double), m[ 7]);
+    WRITE_DOUBLE(8 + 8*sizeof(double), m[ 8]);
+    WRITE_DOUBLE(8 + 9*sizeof(double), m[ 9]);
+    WRITE_DOUBLE(8 + 10*sizeof(double), m[10]);
+    WRITE_DOUBLE(8 + 11*sizeof(double), m[11]);
+    WRITE_DOUBLE(8 + 12*sizeof(double), m[12]);
+    WRITE_DOUBLE(8 + 13*sizeof(double), m[13]);
+    WRITE_DOUBLE(8 + 14*sizeof(double), m[14]);
+    WRITE_DOUBLE(8 + 15*sizeof(double), m[15]);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackMultTransposeMatrixfARB(const GLfloat *m)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = 16*sizeof(*m) + sizeof(GLint) + sizeof(GLenum);
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, GLint, packet_length);
+    WRITE_DATA(4, GLenum, CR_MULTTRANSPOSEMATRIXFARB_EXTEND_OPCODE);
+    WRITE_DATA(8 + 0*sizeof(GLfloat), GLfloat, m[ 0]);
+    WRITE_DATA(8 + 1*sizeof(GLfloat), GLfloat, m[ 1]);
+    WRITE_DATA(8 + 2*sizeof(GLfloat), GLfloat, m[ 2]);
+    WRITE_DATA(8 + 3*sizeof(GLfloat), GLfloat, m[ 3]);
+    WRITE_DATA(8 + 4*sizeof(GLfloat), GLfloat, m[ 4]);
+    WRITE_DATA(8 + 5*sizeof(GLfloat), GLfloat, m[ 5]);
+    WRITE_DATA(8 + 6*sizeof(GLfloat), GLfloat, m[ 6]);
+    WRITE_DATA(8 + 7*sizeof(GLfloat), GLfloat, m[ 7]);
+    WRITE_DATA(8 + 8*sizeof(GLfloat), GLfloat, m[ 8]);
+    WRITE_DATA(8 + 9*sizeof(GLfloat), GLfloat, m[ 9]);
+    WRITE_DATA(8 + 10*sizeof(GLfloat), GLfloat, m[10]);
+    WRITE_DATA(8 + 11*sizeof(GLfloat), GLfloat, m[11]);
+    WRITE_DATA(8 + 12*sizeof(GLfloat), GLfloat, m[12]);
+    WRITE_DATA(8 + 13*sizeof(GLfloat), GLfloat, m[13]);
+    WRITE_DATA(8 + 14*sizeof(GLfloat), GLfloat, m[14]);
+    WRITE_DATA(8 + 15*sizeof(GLfloat), GLfloat, m[15]);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackLoadTransposeMatrixdARB(const GLdouble *m)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = 16*sizeof(*m) + sizeof(GLint) + sizeof(GLenum);
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, GLint, packet_length);
+    WRITE_DATA(4, GLenum, CR_LOADTRANSPOSEMATRIXDARB_EXTEND_OPCODE);
+    WRITE_DOUBLE(8 + 0*sizeof(double), m[ 0]);
+    WRITE_DOUBLE(8 + 1*sizeof(double), m[ 1]);
+    WRITE_DOUBLE(8 + 2*sizeof(double), m[ 2]);
+    WRITE_DOUBLE(8 + 3*sizeof(double), m[ 3]);
+    WRITE_DOUBLE(8 + 4*sizeof(double), m[ 4]);
+    WRITE_DOUBLE(8 + 5*sizeof(double), m[ 5]);
+    WRITE_DOUBLE(8 + 6*sizeof(double), m[ 6]);
+    WRITE_DOUBLE(8 + 7*sizeof(double), m[ 7]);
+    WRITE_DOUBLE(8 + 8*sizeof(double), m[ 8]);
+    WRITE_DOUBLE(8 + 9*sizeof(double), m[ 9]);
+    WRITE_DOUBLE(8 + 10*sizeof(double), m[10]);
+    WRITE_DOUBLE(8 + 11*sizeof(double), m[11]);
+    WRITE_DOUBLE(8 + 12*sizeof(double), m[12]);
+    WRITE_DOUBLE(8 + 13*sizeof(double), m[13]);
+    WRITE_DOUBLE(8 + 14*sizeof(double), m[14]);
+    WRITE_DOUBLE(8 + 15*sizeof(double), m[15]);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackLoadTransposeMatrixfARB(const GLfloat *m)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = 16*sizeof(*m) + sizeof(GLint) + sizeof(GLenum);
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, GLint, packet_length);
+    WRITE_DATA(4, GLenum, CR_LOADTRANSPOSEMATRIXFARB_EXTEND_OPCODE);
+    WRITE_DATA(8 + 0*sizeof(GLfloat), GLfloat, m[ 0]);
+    WRITE_DATA(8 + 1*sizeof(GLfloat), GLfloat, m[ 1]);
+    WRITE_DATA(8 + 2*sizeof(GLfloat), GLfloat, m[ 2]);
+    WRITE_DATA(8 + 3*sizeof(GLfloat), GLfloat, m[ 3]);
+    WRITE_DATA(8 + 4*sizeof(GLfloat), GLfloat, m[ 4]);
+    WRITE_DATA(8 + 5*sizeof(GLfloat), GLfloat, m[ 5]);
+    WRITE_DATA(8 + 6*sizeof(GLfloat), GLfloat, m[ 6]);
+    WRITE_DATA(8 + 7*sizeof(GLfloat), GLfloat, m[ 7]);
+    WRITE_DATA(8 + 8*sizeof(GLfloat), GLfloat, m[ 8]);
+    WRITE_DATA(8 + 9*sizeof(GLfloat), GLfloat, m[ 9]);
+    WRITE_DATA(8 + 10*sizeof(GLfloat), GLfloat, m[10]);
+    WRITE_DATA(8 + 11*sizeof(GLfloat), GLfloat, m[11]);
+    WRITE_DATA(8 + 12*sizeof(GLfloat), GLfloat, m[12]);
+    WRITE_DATA(8 + 13*sizeof(GLfloat), GLfloat, m[13]);
+    WRITE_DATA(8 + 14*sizeof(GLfloat), GLfloat, m[14]);
+    WRITE_DATA(8 + 15*sizeof(GLfloat), GLfloat, m[15]);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_misc.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_misc.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_misc.c	(revision 86648)
@@ -0,0 +1,216 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_error.h"
+
+void PACK_APIENTRY crPackChromiumParametervCR(CR_PACKER_CONTEXT_ARGDECL GLenum target, GLenum type, GLsizei count, const GLvoid *values)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned int header_length = 2 * sizeof(int) + sizeof(target) + sizeof(type) + sizeof(count);
+    unsigned int packet_length;
+    unsigned int params_length = 0;
+    unsigned char *data_ptr;
+    int i, pos;
+
+    switch (type) {
+    case GL_BYTE:
+    case GL_UNSIGNED_BYTE:
+        params_length = sizeof(GLbyte) * count;
+        break;
+    case GL_SHORT:
+    case GL_UNSIGNED_SHORT:
+        params_length = sizeof(GLshort) * count;
+        break;
+    case GL_INT:
+    case GL_UNSIGNED_INT:
+        params_length = sizeof(GLint) * count;
+        break;
+#ifndef IN_RING0
+    case GL_FLOAT:
+        params_length = sizeof(GLfloat) * count;
+        break;
+#endif
+#if 0
+    case GL_DOUBLE:
+        params_length = sizeof(GLdouble) * count;
+        break;
+#endif
+    default:
+        __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
+                                 "crPackChromiumParametervCR(bad type)" );
+        return;
+    }
+
+    packet_length = header_length + params_length;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length );
+    WRITE_DATA( 0, GLint, packet_length );
+    WRITE_DATA( 4, GLenum, CR_CHROMIUMPARAMETERVCR_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLenum, target );
+    WRITE_DATA( 12, GLenum, type );
+    WRITE_DATA( 16, GLsizei, count );
+    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+
+    pos = header_length;
+
+    switch (type) {
+    case GL_BYTE:
+    case GL_UNSIGNED_BYTE:
+        for (i = 0; i < count; i++, pos += sizeof(GLbyte)) {
+            WRITE_DATA( pos, GLbyte, ((GLbyte *) values)[i]);
+        }
+        break;
+    case GL_SHORT:
+    case GL_UNSIGNED_SHORT:
+        for (i = 0; i < count; i++, pos += sizeof(GLshort)) {
+            WRITE_DATA( pos, GLshort, ((GLshort *) values)[i]);
+        }
+        break;
+    case GL_INT:
+    case GL_UNSIGNED_INT:
+        for (i = 0; i < count; i++, pos += sizeof(GLint)) {
+            WRITE_DATA( pos, GLint, ((GLint *) values)[i]);
+        }
+        break;
+#ifndef IN_RING0
+    case GL_FLOAT:
+        for (i = 0; i < count; i++, pos += sizeof(GLfloat)) {
+            WRITE_DATA( pos, GLfloat, ((GLfloat *) values)[i]);
+        }
+        break;
+#endif
+#if 0
+    case GL_DOUBLE:
+        for (i = 0; i < count; i++) {
+            WRITE_foo_DATA( sizeof(int) + 12, GLdouble, ((GLdouble *) values)[i]);
+        }
+        break;
+#endif
+    default:
+        __PackError( __LINE__, __FILE__, GL_INVALID_ENUM,
+                                 "crPackChromiumParametervCR(bad type)" );
+        CR_UNLOCK_PACKER_CONTEXT(pc);
+        return;
+    }
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+#ifndef IN_RING0
+void PACK_APIENTRY crPackDeleteQueriesARB(CR_PACKER_CONTEXT_ARGDECL GLsizei n, const GLuint * ids)
+{
+    unsigned char *data_ptr;
+    int packet_length = sizeof(GLenum)+sizeof(n)+n*sizeof(*ids);
+    if (!ids) return;
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA(0, GLenum, CR_DELETEQUERIESARB_EXTEND_OPCODE);
+    WRITE_DATA(4, GLsizei, n);
+    crMemcpy(data_ptr + 8, ids, n*sizeof(*ids));
+    crHugePacket(CR_EXTEND_OPCODE, data_ptr);
+    crPackFree(data_ptr);
+}
+#endif
+
+void PACK_APIENTRY crPackVBoxTexPresent( CR_PACKER_CONTEXT_ARGDECL GLuint texture, GLuint cfg, GLint xPos, GLint yPos, GLint cRects, const GLint * pRects )
+{
+    GLint i, size, cnt;
+
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    size = 28 + cRects * 4 * sizeof(GLint);
+    CR_GET_BUFFERED_POINTER( pc, size );
+    WRITE_DATA( 0, GLint, size );
+    WRITE_DATA( 4, GLenum, CR_VBOXTEXPRESENT_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLuint, texture );
+    WRITE_DATA( 12, GLuint, cfg );
+    WRITE_DATA( 16, GLint, xPos );
+    WRITE_DATA( 20, GLint, yPos );
+    WRITE_DATA( 24, GLint, cRects );
+
+    cnt = 28;
+    for (i=0; i<cRects; ++i)
+    {
+        WRITE_DATA(cnt, GLint, (GLint) pRects[4*i+0]);
+        WRITE_DATA(cnt+4, GLint, (GLint) pRects[4*i+1]);
+        WRITE_DATA(cnt+8, GLint, (GLint) pRects[4*i+2]);
+        WRITE_DATA(cnt+12, GLint, (GLint) pRects[4*i+3]);
+        cnt += 16;
+    }
+    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackWindowPosition( CR_PACKER_CONTEXT_ARGDECL GLint window, GLint x, GLint y )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    CR_GET_BUFFERED_POINTER( pc, 20 );
+    WRITE_DATA( 0, GLint, 20 );
+    WRITE_DATA( 4, GLenum, CR_WINDOWPOSITION_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLint, window );
+    WRITE_DATA( 12, GLint, x );
+    WRITE_DATA( 16, GLint, y );
+    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackWindowShow( CR_PACKER_CONTEXT_ARGDECL GLint window, GLint flag )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    CR_GET_BUFFERED_POINTER( pc, 16 );
+    WRITE_DATA( 0, GLint, 16 );
+    WRITE_DATA( 4, GLenum, CR_WINDOWSHOW_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLint, window );
+    WRITE_DATA( 12, GLint, flag );
+    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackWindowSize( CR_PACKER_CONTEXT_ARGDECL GLint window, GLint w, GLint h )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    CR_GET_BUFFERED_POINTER( pc, 20 );
+    WRITE_DATA( 0, GLint, 20 );
+    WRITE_DATA( 4, GLenum, CR_WINDOWSIZE_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLint, window );
+    WRITE_DATA( 12, GLint, w );
+    WRITE_DATA( 16, GLint, h );
+    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackBeginQueryARB( CR_PACKER_CONTEXT_ARGDECL GLenum target, GLuint id )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    CR_GET_BUFFERED_POINTER( pc, 16 );
+    WRITE_DATA( 0, GLint, 16 );
+    WRITE_DATA( 4, GLenum, CR_BEGINQUERYARB_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLenum, target );
+    WRITE_DATA( 12, GLuint, id );
+    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackEndQueryARB( CR_PACKER_CONTEXT_ARGDECL GLenum target )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    CR_GET_BUFFERED_POINTER( pc, 12 );
+    WRITE_DATA( 0, GLint, 12 );
+    WRITE_DATA( 4, GLenum, CR_ENDQUERYARB_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLenum, target );
+    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_pixelmap.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_pixelmap.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_pixelmap.c	(revision 86648)
@@ -0,0 +1,64 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_mem.h"
+#include "cr_glstate.h"
+
+static unsigned char * __gl_HandlePixelMapData(GLenum map, GLsizei mapsize, int size_of_value, const GLvoid *values)
+{
+    int nodata = (values == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+    int packet_length = 
+        sizeof( map ) + 
+        sizeof( mapsize ) + sizeof(int) + sizeof(GLint);
+    unsigned char *data_ptr;
+
+    if (!nodata)
+    {
+        packet_length += mapsize*size_of_value;
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+
+    WRITE_DATA( 0, GLenum, map );
+    WRITE_DATA( 4, GLsizei, mapsize );
+    WRITE_DATA( 8, int, nodata);
+    WRITE_DATA( 12, GLint, (GLint)(uintptr_t)values);
+
+    if (!nodata)
+    {
+        crMemcpy( data_ptr + 16, values, mapsize*size_of_value );
+    }
+
+    return data_ptr;
+}
+
+void PACK_APIENTRY crPackPixelMapfv(GLenum map, GLsizei mapsize, 
+                                    const GLfloat *values)
+{
+    unsigned char *data_ptr = __gl_HandlePixelMapData( map, mapsize, sizeof( *values ), values );
+
+    crHugePacket( CR_PIXELMAPFV_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackPixelMapuiv(GLenum map, GLsizei mapsize, 
+                                     const GLuint *values)
+{
+    unsigned char *data_ptr = __gl_HandlePixelMapData( map, mapsize, sizeof( *values ), values );
+
+    crHugePacket( CR_PIXELMAPUIV_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackPixelMapusv(GLenum map, GLsizei mapsize, 
+                                     const GLushort *values)
+{
+    unsigned char *data_ptr = __gl_HandlePixelMapData( map, mapsize, sizeof( *values ), values );
+
+    crHugePacket( CR_PIXELMAPUSV_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_pixels.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_pixels.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_pixels.c	(revision 86648)
@@ -0,0 +1,225 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_pixeldata.h"
+#include "cr_error.h"
+#include "cr_mem.h"
+#include "cr_version.h"
+
+
+void PACK_APIENTRY crPackDrawPixels(GLsizei width, GLsizei height, 
+                                    GLenum format, GLenum type,
+                                    const GLvoid *pixels,
+                                    const CRPixelPackState *unpackstate )
+{
+    unsigned char *data_ptr;
+    int packet_length, imagesize;
+    int noimagedata = (pixels == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+
+    packet_length = 
+        sizeof( width ) +
+        sizeof( height ) +
+        sizeof( format ) +
+        sizeof( type ) + sizeof(int) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        imagesize = crImageSize( format, type, width, height );
+
+        if (imagesize<=0)
+        {
+            crDebug("crPackDrawPixels: 0 image size, ignoring");
+            return;
+        }
+        packet_length += imagesize;
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+    WRITE_DATA( 0, GLsizei, width );
+    WRITE_DATA( 4, GLsizei, height );
+    WRITE_DATA( 8, GLenum, format );
+    WRITE_DATA( 12, GLenum, type );
+    WRITE_DATA( 16, GLint, noimagedata );
+    WRITE_DATA( 20, GLint, (GLint) (uintptr_t) pixels );
+
+    if (!noimagedata)
+    {
+        crPixelCopy2D(width, height,
+                      (void *) (data_ptr + 24), format, type, NULL, /* dst */
+                      pixels, format, type, unpackstate);  /* src */
+    }
+
+    crHugePacket( CR_DRAWPIXELS_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackReadPixels(GLint x, GLint y, GLsizei width, 
+                                    GLsizei height, GLenum format,
+                                    GLenum type, GLvoid *pixels,
+                                    const CRPixelPackState *packstate,
+                                    int *writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    GLint stride = 0;
+    GLint bytes_per_row;
+    int bytes_per_pixel;
+    *writeback = 0;
+
+    bytes_per_pixel = crPixelSize(format, type);
+    if (bytes_per_pixel <= 0) {
+        char string[80];
+        sprintf(string, "crPackReadPixels(format 0x%x or type 0x%x)", format, type);
+        __PackError(__LINE__, __FILE__, GL_INVALID_ENUM, string);
+        return;
+    }
+
+    /* default bytes_per_row so crserver can allocate memory */
+    bytes_per_row = width * bytes_per_pixel;
+
+    stride = bytes_per_row;
+    if (packstate->alignment != 1) {
+         GLint remainder = bytes_per_row % packstate->alignment;
+         if (remainder)
+                stride = bytes_per_row + (packstate->alignment - remainder);
+    }
+
+    CR_GET_BUFFERED_POINTER(pc, 48 + sizeof(CRNetworkPointer) );
+    WRITE_DATA( 0,  GLint,  x );
+    WRITE_DATA( 4,  GLint,  y );
+    WRITE_DATA( 8,  GLsizei,  width );
+    WRITE_DATA( 12, GLsizei,  height );
+    WRITE_DATA( 16, GLenum, format );
+    WRITE_DATA( 20, GLenum, type );
+    WRITE_DATA( 24, GLint,  stride ); /* XXX not really used! */
+    WRITE_DATA( 28, GLint, packstate->alignment );
+    WRITE_DATA( 32, GLint, packstate->skipRows );
+    WRITE_DATA( 36, GLint, packstate->skipPixels );
+    WRITE_DATA( 40, GLint, bytes_per_row );
+    WRITE_DATA( 44, GLint, packstate->rowLength );
+    WRITE_NETWORK_POINTER( 48, (char *) pixels );
+    WRITE_OPCODE( pc, CR_READPIXELS_OPCODE );
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+/* Round N up to the next multiple of 8 */
+#define CEIL8(N)  (((N) + 7) & ~0x7)
+
+void PACK_APIENTRY crPackBitmap(GLsizei width, GLsizei height, 
+                                GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove,
+                                const GLubyte *bitmap, const CRPixelPackState *unpack )
+{
+    const int noimagedata = (bitmap == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+    unsigned char *data_ptr;
+    int data_length = 0;
+    /*GLubyte *destBitmap = NULL; - unused */
+    int packet_length = 
+        sizeof( width ) + 
+        sizeof( height ) +
+        sizeof( xorig ) + 
+        sizeof( yorig ) + 
+        sizeof( xmove ) + 
+        sizeof( ymove ) +
+        sizeof( GLuint ) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        data_length = CEIL8(width) * height / 8;
+        packet_length += data_length;
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+
+    WRITE_DATA( 0, GLsizei, width );
+    WRITE_DATA( 4, GLsizei, height );
+    WRITE_DATA( 8, GLfloat, xorig );
+    WRITE_DATA( 12, GLfloat, yorig );
+    WRITE_DATA( 16, GLfloat, xmove );
+    WRITE_DATA( 20, GLfloat, ymove );
+    WRITE_DATA( 24, GLuint, noimagedata );
+    WRITE_DATA( 28, GLint, (GLint) (uintptr_t) bitmap);
+
+    if (!noimagedata)
+        crBitmapCopy(width, height, (GLubyte *)(data_ptr + 32), bitmap, unpack);
+
+    crHugePacket( CR_BITMAP_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+/*
+       ZPix - compressed DrawPixels
+*/
+void PACK_APIENTRY crPackZPixCR( GLsizei width, GLsizei height, 
+        GLenum format, GLenum type,
+        GLenum ztype, GLint zparm, GLint length,
+        const GLvoid *pixels,
+        const CRPixelPackState *unpackstate )
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    (void)unpackstate;
+
+    if (pixels == NULL)
+    {
+        return;
+    }
+
+    packet_length = 
+        sizeof( int ) +  /* packet size */
+        sizeof( GLenum ) +  /* extended opcode */
+        sizeof( width ) +
+        sizeof( height ) +
+        sizeof( format ) +
+        sizeof( type ) +
+        sizeof( ztype ) +
+        sizeof( zparm ) +
+        sizeof( length );
+
+    packet_length += length;
+
+/* XXX JAG
+  crDebug("PackZPixCR: fb %d x %d, state %d, zlen = %d, plen = %d",
+                               width, height, ztype, length, packet_length);
+*/
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+    WRITE_DATA(  0, GLenum , CR_ZPIXCR_EXTEND_OPCODE );
+    WRITE_DATA(  4, GLsizei, width );
+    WRITE_DATA(  8, GLsizei, height );
+    WRITE_DATA( 12, GLenum,  format );
+    WRITE_DATA( 16, GLenum,  type );
+    WRITE_DATA( 20, GLenum,  ztype );
+    WRITE_DATA( 24, GLint,   zparm );
+    WRITE_DATA( 28, GLint,   length );
+
+    crMemcpy((void *) (data_ptr+32), pixels, length);
+
+    crHugePacket( CR_EXTEND_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+
+void PACK_APIENTRY
+crPackGetTexImage( GLenum target, GLint level, GLenum format, GLenum type,
+                                     GLvoid * pixels, const CRPixelPackState * packstate,
+                                     int * writeback )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc; (void) packstate;
+    CR_GET_BUFFERED_POINTER( pc, 40 );
+    WRITE_DATA( 0, GLint, 40 );
+    WRITE_DATA( 4, GLenum, CR_GETTEXIMAGE_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLenum, target );
+    WRITE_DATA( 12, GLint, level );
+    WRITE_DATA( 16, GLenum, format );
+    WRITE_DATA( 20, GLenum, type );
+    WRITE_NETWORK_POINTER( 24, (void *) pixels );
+    WRITE_NETWORK_POINTER( 32, (void *) writeback );
+    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_point.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_point.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_point.c	(revision 86648)
@@ -0,0 +1,107 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+#include "cr_version.h"
+
+#ifdef CR_ARB_point_parameters
+
+static GLboolean __handlePointDataf( GLenum pname, const GLfloat *params )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    int params_length = 0;
+    int packet_length = 2 * sizeof( int ) + sizeof( pname );
+    unsigned char *data_ptr;
+    switch( pname )
+    {
+        case GL_POINT_SIZE_MIN_ARB:
+        case GL_POINT_SIZE_MAX_ARB:
+        case GL_POINT_FADE_THRESHOLD_SIZE_ARB:
+            params_length = sizeof( *params );
+            break;
+        case GL_POINT_DISTANCE_ATTENUATION_ARB:
+            params_length = 3 * sizeof( *params );
+            break;
+        default:
+            {
+                char msg[100];
+                sprintf(msg, "Invalid pname in PointParameter: %d", (int) pname );
+                __PackError( __LINE__, __FILE__, GL_INVALID_ENUM, msg);
+            }                                
+            return GL_FALSE;
+    }
+    packet_length += params_length;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length );
+    WRITE_DATA( 0, GLint, packet_length );
+    WRITE_DATA( 4, GLenum, CR_POINTPARAMETERFVARB_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLenum, pname );
+    WRITE_DATA( 12, GLfloat, params[0] );
+    if (packet_length > 16) 
+    {
+        WRITE_DATA( 16, GLfloat, params[1] );
+        WRITE_DATA( 20, GLfloat, params[2] );
+    }
+    return GL_TRUE;
+}
+
+void PACK_APIENTRY crPackPointParameterfvARB(GLenum pname, const GLfloat *params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    if (__handlePointDataf( pname, params ))
+        WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+#endif
+
+static GLboolean __handlePointDatai( GLenum pname, const GLint *params )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    int params_length = 0;
+    int packet_length = 2 * sizeof( int ) + sizeof( pname );
+    unsigned char *data_ptr;
+    switch( pname )
+    {
+        case GL_POINT_SIZE_MIN_ARB:
+        case GL_POINT_SIZE_MAX_ARB:
+        case GL_POINT_FADE_THRESHOLD_SIZE_ARB:
+            params_length = sizeof( *params );
+            break;
+        case GL_POINT_DISTANCE_ATTENUATION_ARB:
+            params_length = 3 * sizeof( *params );
+            break;
+        default:
+            {
+                char msg[100];
+                sprintf(msg, "Invalid pname in PointParameter: %d", (int) pname );
+                __PackError( __LINE__, __FILE__, GL_INVALID_ENUM, msg);
+            }
+            return GL_FALSE;
+    }
+    packet_length += params_length;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length );
+    WRITE_DATA( 0, GLint, packet_length );
+    WRITE_DATA( 4, GLenum, CR_POINTPARAMETERIV_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLenum, pname );
+    WRITE_DATA( 12, GLint, params[0] );
+    if (packet_length > 16) 
+    {
+        WRITE_DATA( 16, GLint, params[1] );
+        WRITE_DATA( 20, GLint, params[2] );
+    }
+    return GL_TRUE;
+}
+
+void PACK_APIENTRY crPackPointParameteriv(GLenum pname, const GLint *params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    if (__handlePointDatai( pname, params ))
+        WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_program.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_program.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_program.c	(revision 86648)
@@ -0,0 +1,542 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+/*
+ * Packer functions for GL_NV_vertex_program extension.
+ * XXX: Quite a few of these functions are unfinished.
+ */
+
+
+#include "packer.h"
+#include "cr_error.h"
+
+
+void PACK_APIENTRY crPackProgramParameters4dvNV(GLenum target, GLuint index, GLuint num, const GLdouble * params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    int packet_length = sizeof(int) + sizeof(target) + sizeof(index) + sizeof(num) + num * 4 * sizeof(GLdouble);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(sizeof(int) + 0, GLenum, target);
+    WRITE_DATA(sizeof(int) + 4, GLuint, index);
+    WRITE_DATA(sizeof(int) + 8, GLuint, num);
+    crMemcpy(data_ptr + sizeof(int) + 12, params, num * 4 * sizeof(GLdouble));
+
+    WRITE_OPCODE(pc, CR_PROGRAMPARAMETERS4DVNV_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+
+void PACK_APIENTRY crPackProgramParameters4fvNV(GLenum target, GLuint index, GLuint num, const GLfloat * params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    int packet_length = sizeof(int) + sizeof(target) + sizeof(index) + sizeof(num) + num * 4 * sizeof(GLfloat);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(sizeof(int) + 0, GLenum, target);
+    WRITE_DATA(sizeof(int) + 4, GLuint, index);
+    WRITE_DATA(sizeof(int) + 8, GLuint, num);
+    crMemcpy(data_ptr + sizeof(int) + 12, params, num * 4 * sizeof(GLfloat));
+
+    WRITE_OPCODE(pc, CR_PROGRAMPARAMETERS4FVNV_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+
+void PACK_APIENTRY crPackVertexAttribs1dvNV(GLuint index, GLsizei n, const GLdouble *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib1dvARB(index + i, v + i);
+}
+
+
+void PACK_APIENTRY crPackVertexAttribs1fvNV(GLuint index, GLsizei n, const GLfloat *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib1fvARB(index + i, v + i);
+}
+
+
+void PACK_APIENTRY crPackVertexAttribs1svNV(GLuint index, GLsizei n, const GLshort *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib1svARB(index + i, v + i);
+}
+
+
+void PACK_APIENTRY crPackVertexAttribs2dvNV(GLuint index, GLsizei n, const GLdouble *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib2dvARB(index + i, v + 2 * i);
+}
+
+void PACK_APIENTRY crPackVertexAttribs2fvNV(GLuint index, GLsizei n, const GLfloat *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib2fvARB(index + i, v + 2 * i);
+}
+
+void PACK_APIENTRY crPackVertexAttribs2svNV(GLuint index, GLsizei n, const GLshort *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib2svARB(index + i, v + 2 * i);
+}
+
+void PACK_APIENTRY crPackVertexAttribs3dvNV(GLuint index, GLsizei n, const GLdouble *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib3dvARB(index + i, v + 3 * i);
+}
+
+void PACK_APIENTRY crPackVertexAttribs3fvNV(GLuint index, GLsizei n, const GLfloat *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib3fvARB(index + i, v + 3 * i);
+}
+
+void PACK_APIENTRY crPackVertexAttribs3svNV(GLuint index, GLsizei n, const GLshort *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib3svARB(index + i, v + 3 * i);
+}
+
+void PACK_APIENTRY crPackVertexAttribs4dvNV(GLuint index, GLsizei n, const GLdouble *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib4dvARB(index + i, v + 4 * i);
+}
+
+void PACK_APIENTRY crPackVertexAttribs4fvNV(GLuint index, GLsizei n, const GLfloat *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib4fvARB(index + i, v + 4 * i);
+}
+
+void PACK_APIENTRY crPackVertexAttribs4svNV(GLuint index, GLsizei n, const GLshort *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib4svARB(index + i, v + 4 * i);
+}
+
+void PACK_APIENTRY crPackVertexAttribs4ubvNV(GLuint index, GLsizei n, const GLubyte *v)
+{
+    GLint i;
+    /* reverse order so we hit index 0 last (provoking glVertex) */
+    for (i = n - 1; i >= 0; i--)
+        crPackVertexAttrib4ubvARB(index + i, v + 4 * i);
+}
+
+
+void PACK_APIENTRY crPackExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params)
+{
+    const int packet_length = 32;
+    unsigned char *data_ptr = NULL;
+    CR_GET_PACKER_CONTEXT(pc);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(4, GLenum, CR_EXECUTEPROGRAMNV_EXTEND_OPCODE);
+    WRITE_DATA(8, GLenum, target);
+    WRITE_DATA(12, GLuint, id);
+    WRITE_DATA(16, GLfloat, params[0]);
+    WRITE_DATA(20, GLfloat, params[1]);
+    WRITE_DATA(24, GLfloat, params[2]);
+    WRITE_DATA(28, GLfloat, params[3]);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackLoadProgramNV(GLenum target, GLuint id, GLsizei len, const GLubyte *program)
+{
+    const int packet_length = 20 + len;
+    unsigned char *data_ptr = NULL;
+    CR_GET_PACKER_CONTEXT(pc);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(4, GLenum, CR_LOADPROGRAMNV_EXTEND_OPCODE);
+    WRITE_DATA(8, GLenum, target);
+    WRITE_DATA(12, GLuint, id);
+    WRITE_DATA(16, GLsizei, len);
+    crMemcpy((void *) (data_ptr + 20), program, len);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackRequestResidentProgramsNV(GLsizei n, const GLuint *ids)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    (void) pc;
+    (void) n;
+    (void) ids;
+    /* We're no-op'ing this function for now. */
+}
+
+
+void PACK_APIENTRY crPackProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    int packet_length = 32 + len;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, GLint, packet_length);
+    WRITE_DATA(4, GLenum, CR_PROGRAMNAMEDPARAMETER4FNV_EXTEND_OPCODE);
+    WRITE_DATA(8, GLuint, id);
+    WRITE_DATA(12, GLsizei, len);
+    WRITE_DATA(16, GLfloat, x);
+    WRITE_DATA(20, GLfloat, y);
+    WRITE_DATA(24, GLfloat, z);
+    WRITE_DATA(28, GLfloat, w);
+    crMemcpy((void *) (data_ptr + 32), name, len);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    int packet_length = 48 + len;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, GLint, packet_length);
+    WRITE_DATA(4, GLenum, CR_PROGRAMNAMEDPARAMETER4DNV_EXTEND_OPCODE);
+    WRITE_DATA(8, GLenum, id);
+    WRITE_DATA(12, GLuint, len);
+    WRITE_DOUBLE(16, x);
+    WRITE_DOUBLE(24, y);
+    WRITE_DOUBLE(32, z);
+    WRITE_DOUBLE(40, w);
+    crMemcpy((void *) (data_ptr + 48), name, len);
+
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v)
+{
+    crPackProgramNamedParameter4fNV(id, len, name, v[0], v[1], v[2], v[3]);
+}
+
+void PACK_APIENTRY crPackProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v)
+{
+    crPackProgramNamedParameter4dNV(id, len, name, v[0], v[1], v[2], v[3]);
+}
+
+
+void PACK_APIENTRY
+crPackAreProgramsResidentNV(GLsizei n, const GLuint * programs,
+                                                        GLboolean *residences, GLboolean *return_val,
+                                                        int *writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    int packet_length;
+
+    (void) return_val; /* Caller must compute this from residences!!! */
+
+    packet_length = sizeof(int) +   /* packet length */
+        sizeof(GLenum) +                        /* extend opcode */
+        sizeof(n) +                                 /* num programs */
+        n * sizeof(*programs) +         /* programs */
+        8 + 8;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(4, GLenum, CR_AREPROGRAMSRESIDENTNV_EXTEND_OPCODE);
+    WRITE_DATA(8, GLsizei, n);
+    crMemcpy(data_ptr + 12, programs, n * sizeof(*programs));
+    WRITE_NETWORK_POINTER(12 + n * sizeof(*programs),   (void *) residences);
+    WRITE_NETWORK_POINTER(20 + n * sizeof(*programs), (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+
+void PACK_APIENTRY crPackGetProgramNamedParameterfvNV(GLuint id, GLsizei len, const GLubyte *name, GLfloat *params, int *writeback)
+{
+    int packet_length = 32 + len;
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, GLint, packet_length);
+    WRITE_DATA(4, GLenum, CR_GETPROGRAMNAMEDPARAMETERFVNV_EXTEND_OPCODE);
+    WRITE_DATA(8, GLuint, id);
+    WRITE_DATA(12, GLsizei, len);
+    crMemcpy(data_ptr + 16, name, len);
+    WRITE_NETWORK_POINTER(16 + len, (void *) params);
+    WRITE_NETWORK_POINTER(16 + len + 8, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetProgramNamedParameterdvNV(GLuint id, GLsizei len, const GLubyte *name, GLdouble *params, int *writeback)
+{
+    int packet_length = 32 + len;
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, GLint, packet_length);
+    WRITE_DATA(4, GLenum, CR_GETPROGRAMNAMEDPARAMETERDVNV_EXTEND_OPCODE);
+    WRITE_DATA(8, GLuint, id);
+    WRITE_DATA(12, GLsizei, len);
+    crMemcpy(data_ptr + 16, name, len);
+    WRITE_NETWORK_POINTER(16 + len, (void *) params);
+    WRITE_NETWORK_POINTER(16 + len + 8, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+
+void PACK_APIENTRY crPackDeleteProgramsARB(GLsizei n, const GLuint *ids)
+{
+    unsigned char *data_ptr = NULL;
+    int packet_length = sizeof(GLenum) + sizeof(n) + n * sizeof(*ids);
+
+    if (!ids)
+        return;
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA(0, GLenum, CR_DELETEPROGRAMSARB_EXTEND_OPCODE);
+    WRITE_DATA(4, GLsizei, n);
+    crMemcpy(data_ptr + 8, ids, n * sizeof(*ids));
+    crHugePacket(CR_EXTEND_OPCODE, data_ptr);
+    crPackFree(data_ptr);
+}
+
+
+void PACK_APIENTRY  crPackProgramStringARB(GLenum target, GLenum format, GLsizei len, const void *string)
+{
+    const int packet_length = 20 + len;
+    unsigned char *data_ptr = NULL;
+    CR_GET_PACKER_CONTEXT(pc);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(4, GLenum, CR_PROGRAMSTRINGARB_EXTEND_OPCODE);
+    WRITE_DATA(8, GLenum, target);
+    WRITE_DATA(12, GLuint, format);
+    WRITE_DATA(16, GLsizei, len);
+    crMemcpy((void *) (data_ptr + 20), string, len);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+
+/*
+ * Can't easily auto-generate these functions since there aren't
+ * non-vector versions.
+ */
+
+void PACK_APIENTRY crPackVertexAttrib4NbvARB(GLuint index, const GLbyte *v)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, 8);
+    pc->current.c.vertexAttrib.b4[index] = data_ptr + 4;
+    pc->current.attribsUsedMask |= (1 << index);
+    WRITE_DATA(0, GLuint, index);
+    WRITE_DATA(4, GLbyte, v[0]);
+    WRITE_DATA(5, GLbyte, v[1]);
+    WRITE_DATA(6, GLbyte, v[2]);
+    WRITE_DATA(7, GLbyte, v[3]);
+    WRITE_OPCODE(pc, CR_VERTEXATTRIB4NBVARB_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackVertexAttrib4NivARB(GLuint index, const GLint *v)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, 20);
+    pc->current.c.vertexAttrib.i4[index] = data_ptr + 4;
+    pc->current.attribsUsedMask |= (1 << index);
+    WRITE_DATA(0, GLuint, index);
+    WRITE_DATA(4, GLint, v[0]);
+    WRITE_DATA(8, GLint, v[1]);
+    WRITE_DATA(12, GLint, v[2]);
+    WRITE_DATA(16, GLint, v[3]);
+    WRITE_OPCODE(pc, CR_VERTEXATTRIB4NIVARB_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackVertexAttrib4NsvARB(GLuint index, const GLshort *v)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, 12);
+    pc->current.c.vertexAttrib.s4[index] = data_ptr + 4;
+    pc->current.attribsUsedMask |= (1 << index);
+    WRITE_DATA(0, GLuint, index);
+    WRITE_DATA(4, GLshort, v[0]);
+    WRITE_DATA(6, GLshort, v[1]);
+    WRITE_DATA(8, GLshort, v[2]);
+    WRITE_DATA(10, GLshort, v[3]);
+    WRITE_OPCODE(pc, CR_VERTEXATTRIB4NSVARB_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackVertexAttrib4NubvARB(GLuint index, const GLubyte * v)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, 8);
+    pc->current.c.vertexAttrib.ub4[index] = data_ptr + 4;
+    pc->current.attribsUsedMask |= (1 << index);
+    WRITE_DATA(0, GLuint, index);
+    WRITE_DATA(4, GLubyte, v[0]);
+    WRITE_DATA(5, GLubyte, v[1]);
+    WRITE_DATA(6, GLubyte, v[2]);
+    WRITE_DATA(7, GLubyte, v[3]);
+    WRITE_OPCODE(pc, CR_VERTEXATTRIB4NUBVARB_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackVertexAttrib4NuivARB(GLuint index, const GLuint * v)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, 20);
+    pc->current.c.vertexAttrib.ui4[index] = data_ptr + 4;
+    pc->current.attribsUsedMask |= (1 << index);
+    WRITE_DATA(0, GLuint, index);
+    WRITE_DATA(4, GLuint, v[0]);
+    WRITE_DATA(8, GLuint, v[1]);
+    WRITE_DATA(12, GLuint, v[2]);
+    WRITE_DATA(16, GLuint, v[3]);
+    WRITE_OPCODE(pc, CR_VERTEXATTRIB4NUIVARB_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackVertexAttrib4NusvARB(GLuint index, const GLushort * v)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, 12);
+    pc->current.c.vertexAttrib.s4[index] = data_ptr + 4;
+    pc->current.attribsUsedMask |= (1 << index);
+    WRITE_DATA(0, GLuint, index);
+    WRITE_DATA(4, GLushort, v[0]);
+    WRITE_DATA(6, GLushort, v[1]);
+    WRITE_DATA(8, GLushort, v[2]);
+    WRITE_DATA(10, GLushort, v[3]);
+    WRITE_OPCODE(pc, CR_VERTEXATTRIB4NUSVARB_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackVertexAttrib4bvARB(GLuint index, const GLbyte * v)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, 8);
+    pc->current.c.vertexAttrib.b4[index] = data_ptr + 4;
+    pc->current.attribsUsedMask |= (1 << index);
+    WRITE_DATA(0, GLuint, index);
+    WRITE_DATA(4, GLbyte, v[0]);
+    WRITE_DATA(5, GLbyte, v[1]);
+    WRITE_DATA(6, GLbyte, v[2]);
+    WRITE_DATA(7, GLbyte, v[3]);
+    WRITE_OPCODE(pc, CR_VERTEXATTRIB4BVARB_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackVertexAttrib4ivARB(GLuint index, const GLint * v)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, 20);
+    pc->current.c.vertexAttrib.i4[index] = data_ptr + 4;
+    pc->current.attribsUsedMask |= (1 << index);
+    WRITE_DATA(0, GLuint, index);
+    WRITE_DATA(4, GLint, v[0]);
+    WRITE_DATA(8, GLint, v[1]);
+    WRITE_DATA(12, GLint, v[2]);
+    WRITE_DATA(16, GLint, v[3]);
+    WRITE_OPCODE(pc, CR_VERTEXATTRIB4IVARB_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackVertexAttrib4uivARB(GLuint index, const GLuint * v)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, 20);
+    pc->current.c.vertexAttrib.ui4[index] = data_ptr + 4;
+    pc->current.attribsUsedMask |= (1 << index);
+    WRITE_DATA(0, GLuint, index);
+    WRITE_DATA(4, GLuint, v[0]);
+    WRITE_DATA(8, GLuint, v[1]);
+    WRITE_DATA(12, GLuint, v[2]);
+    WRITE_DATA(16, GLuint, v[3]);
+    WRITE_OPCODE(pc, CR_VERTEXATTRIB4UIVARB_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackVertexAttrib4usvARB(GLuint index, const GLushort * v)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, 12);
+    pc->current.c.vertexAttrib.s4[index] = data_ptr + 4;
+    pc->current.attribsUsedMask |= (1 << index);
+    WRITE_DATA(0, GLuint, index);
+    WRITE_DATA(4, GLushort, v[0]);
+    WRITE_DATA(6, GLushort, v[1]);
+    WRITE_DATA(8, GLushort, v[2]);
+    WRITE_DATA(10, GLushort, v[3]);
+    WRITE_OPCODE(pc, CR_VERTEXATTRIB4USVARB_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+
+void PACK_APIENTRY crPackVertexAttrib4ubvARB(GLuint index, const GLubyte * v)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr = NULL;
+    CR_GET_BUFFERED_POINTER(pc, 8);
+    pc->current.c.vertexAttrib.ub4[index] = data_ptr + 4;
+    pc->current.attribsUsedMask |= (1 << index);
+    WRITE_DATA(0, GLuint, index);
+    WRITE_DATA(4, GLubyte, v[0]);
+    WRITE_DATA(5, GLubyte, v[1]);
+    WRITE_DATA(6, GLubyte, v[2]);
+    WRITE_DATA(7, GLubyte, v[3]);
+    WRITE_OPCODE(pc, CR_VERTEXATTRIB4UBVARB_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_regcombiner.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_regcombiner.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_regcombiner.c	(revision 86648)
@@ -0,0 +1,82 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+
+static GLboolean __handleCombinerParameterData(GLenum pname, const GLfloat *params, GLenum extended_opcode)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned int params_length = 0;
+    unsigned int packet_length = sizeof(int) + sizeof(extended_opcode) + sizeof(pname);
+    unsigned char *data_ptr;
+
+    switch(pname)
+    {
+        case GL_CONSTANT_COLOR0_NV:
+        case GL_CONSTANT_COLOR1_NV:
+            params_length = 4 * sizeof(*params);
+            break;
+        case GL_NUM_GENERAL_COMBINERS_NV:
+        case GL_COLOR_SUM_CLAMP_NV:
+            params_length = sizeof(*params);
+            break;
+        default:
+            __PackError(__LINE__, __FILE__, GL_INVALID_ENUM,
+                                     "crPackCombinerParameter(bad pname)");
+            CRASSERT(0);
+            return GL_FALSE;
+    }
+    packet_length += params_length;
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(sizeof(int) + 0, GLenum, extended_opcode);
+    WRITE_DATA(sizeof(int) + 4, GLenum, pname);
+    WRITE_DATA(sizeof(int) + 8, GLfloat, params[0]);
+    if (params_length > sizeof(*params))
+    {
+        WRITE_DATA(sizeof(int) + 12, GLfloat, params[1]);
+        WRITE_DATA(sizeof(int) + 16, GLfloat, params[2]);
+        WRITE_DATA(sizeof(int) + 20, GLfloat, params[3]);
+        CRASSERT(packet_length == sizeof(int) + 20 + 4);
+    }
+    return GL_TRUE;
+}
+
+void PACK_APIENTRY crPackCombinerParameterfvNV(GLenum pname, const GLfloat *params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    if (__handleCombinerParameterData(pname, params, CR_COMBINERPARAMETERFVNV_EXTEND_OPCODE))
+        WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackCombinerParameterivNV(GLenum pname, const GLint *params)
+{
+    /* floats and ints are the same size, so the packing should be the same */
+    CR_GET_PACKER_CONTEXT(pc);
+    if (__handleCombinerParameterData(pname, (const GLfloat *) params, CR_COMBINERPARAMETERIVNV_EXTEND_OPCODE))
+        WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackCombinerStageParameterfvNV(GLenum stage, GLenum pname, const GLfloat *params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+
+    CR_GET_BUFFERED_POINTER(pc, 32);
+    WRITE_DATA(0, GLint, 32);
+    WRITE_DATA(4, GLenum, CR_COMBINERSTAGEPARAMETERFVNV_EXTEND_OPCODE);
+    WRITE_DATA(8, GLenum, stage);
+    WRITE_DATA(12, GLenum, pname);
+    WRITE_DATA(16, GLfloat, params[0]);
+    WRITE_DATA(20, GLfloat, params[1]);
+    WRITE_DATA(24, GLfloat, params[2]);
+    WRITE_DATA(28, GLfloat, params[3]);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c	(revision 86648)
@@ -0,0 +1,635 @@
+/* $Id$ */
+
+/** @file
+ * VBox OpenGL DRI driver functions
+ */
+
+/*
+ * Copyright (C) 2009-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include "packer.h"
+#include "cr_error.h"
+#include "cr_string.h"
+
+void PACK_APIENTRY crPackBindAttribLocation(GLuint program, GLuint index, const char *name)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int cbName = crStrlen(name)+1;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(program)+sizeof(index) + cbName*sizeof(*name);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_BINDATTRIBLOCATION_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLuint, program);
+    WRITE_DATA_AI(GLuint, index);
+    crMemcpy(data_ptr, name, cbName*sizeof(*name));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackShaderSource(GLuint shader, GLsizei count, const char **string, const GLint *length)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    GLint *pLocalLength;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(shader)+sizeof(count)+sizeof(GLint)+count*sizeof(*pLocalLength);
+    GLsizei i;
+
+    if ((0==count) || (!string)) return;
+
+    pLocalLength = crAlloc(count*sizeof(*length));
+    if (!pLocalLength) return;
+
+    for (i=0; i<count; ++i)
+    {
+        pLocalLength[i] = ((length && (length[i]>=0)) ? length[i] : crStrlen(string[i]))+1;
+        packet_length += pLocalLength[i];
+    }
+
+    if (length)
+    {
+        packet_length += count*sizeof(*length);
+    }
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_SHADERSOURCE_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLuint, shader);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLint, (GLint)(length ? 1:0));
+    crMemcpy(data_ptr, pLocalLength, count*sizeof(*pLocalLength));
+    data_ptr += count*sizeof(*pLocalLength);
+
+    if (length)
+    {
+        crMemcpy(data_ptr, length, count*sizeof(*length));
+        data_ptr += count*sizeof(*length);
+    }
+
+    for (i=0; i<count; ++i)
+    {
+        if (string[i])
+        {
+            if (length && (length[i]>=0))
+            {
+                /* include \0 in the string to make intel drivers happy */
+                crMemcpy(data_ptr, string[i], pLocalLength[i] - 1);
+                data_ptr[pLocalLength[i] - 1] = '\0';
+            }
+            else
+            {
+                /* the \0 s already in the string */
+                crMemcpy(data_ptr, string[i], pLocalLength[i]);
+            }
+        }
+        else
+        {
+            CRASSERT(pLocalLength[i]==1);
+            *data_ptr = 0;
+        }
+        data_ptr += pLocalLength[i];
+    }
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+
+    crFree(pLocalLength);
+}
+
+void PACK_APIENTRY crPackUniform1fv(GLint location, GLsizei count, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count) + count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORM1FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    crMemcpy(data_ptr, value, count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniform1iv(GLint location, GLsizei count, const GLint *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count) + count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORM1IV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    crMemcpy(data_ptr, value, count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniform2fv(GLint location, GLsizei count, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count) + 2*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORM2FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    crMemcpy(data_ptr, value, 2*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniform2iv(GLint location, GLsizei count, const GLint *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count) + 2*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORM2IV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    crMemcpy(data_ptr, value, 2*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniform3fv(GLint location, GLsizei count, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count) + 3*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORM3FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    crMemcpy(data_ptr, value, 3*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniform3iv(GLint location, GLsizei count, const GLint *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count) + 3*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORM3IV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    crMemcpy(data_ptr, value, 3*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniform4fv(GLint location, GLsizei count, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count) + 4*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORM4FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    crMemcpy(data_ptr, value, 4*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniform4iv(GLint location, GLsizei count, const GLint *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count) + 4*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORM4IV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    crMemcpy(data_ptr, value, 4*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose) + 2*2*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX2FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 2*2*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose) + 3*3*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX3FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 3*3*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose) + 4*4*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX4FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 4*4*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 2*3*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX2X3FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 2*3*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 3*2*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX3X2FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 3*2*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 2*4*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX2X4FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 2*4*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 4*2*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX4X2FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 4*2*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 3*4*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX3X4FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 3*4*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 4*3*count*sizeof(*value);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX4X3FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 4*3*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackDrawBuffers(GLsizei n, const GLenum *bufs)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(n) + n*sizeof(*bufs);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_DRAWBUFFERS_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLsizei, n);
+    crMemcpy(data_ptr, bufs, n*sizeof(*bufs));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+/** @todo next 8 functions are bit hacky,
+ * we expect packspu to pass a single structure with all output parameters via first output pointer.
+ * it'd be better to add CRMessageMultiReadback one day.
+ */
+void PACK_APIENTRY crPackGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, char * name, int * writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    (void) size;
+    (void) type;
+    (void) name;
+    CR_GET_BUFFERED_POINTER(pc, 36);
+    WRITE_DATA(0, GLint, 36);
+    WRITE_DATA(4, GLenum, CR_GETACTIVEATTRIB_EXTEND_OPCODE);
+    WRITE_DATA(8, GLuint, program);
+    WRITE_DATA(12, GLuint, index);
+    WRITE_DATA(16, GLsizei, bufSize);
+    WRITE_NETWORK_POINTER(20, (void *) length);
+    WRITE_NETWORK_POINTER(28, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, char * name, int * writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    (void) size;
+    (void) type;
+    (void) name;
+    CR_GET_BUFFERED_POINTER(pc, 36);
+    WRITE_DATA(0, GLint, 36);
+    WRITE_DATA(4, GLenum, CR_GETACTIVEUNIFORM_EXTEND_OPCODE);
+    WRITE_DATA(8, GLuint, program);
+    WRITE_DATA(12, GLuint, index);
+    WRITE_DATA(16, GLsizei, bufSize);
+    WRITE_NETWORK_POINTER(20, (void *) length);
+    WRITE_NETWORK_POINTER(28, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders, int * writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    (void) shaders;
+    CR_GET_BUFFERED_POINTER(pc, 32);
+    WRITE_DATA(0, GLint, 32);
+    WRITE_DATA(4, GLenum, CR_GETATTACHEDSHADERS_EXTEND_OPCODE);
+    WRITE_DATA(8, GLuint, program);
+    WRITE_DATA(12, GLsizei, maxCount);
+    WRITE_NETWORK_POINTER(16, (void *) count);
+    WRITE_NETWORK_POINTER(24, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetAttachedObjectsARB(VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * count, VBoxGLhandleARB * obj, int * writeback)
+{
+        CR_GET_PACKER_CONTEXT(pc);
+        unsigned char *data_ptr;
+        (void) pc; (void) obj;
+        CR_GET_BUFFERED_POINTER(pc, 32);
+        WRITE_DATA(0, GLint, 32);
+        WRITE_DATA(4, GLenum, CR_GETATTACHEDOBJECTSARB_EXTEND_OPCODE);
+        WRITE_DATA(8, VBoxGLhandleARB, containerObj);
+        WRITE_DATA(12, GLsizei, maxCount);
+        WRITE_NETWORK_POINTER(16, (void *) count);
+        WRITE_NETWORK_POINTER(24, (void *) writeback);
+        WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+        CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetInfoLogARB(VBoxGLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog, int * writeback)
+{
+        CR_GET_PACKER_CONTEXT(pc);
+        unsigned char *data_ptr;
+        (void) pc; (void) infoLog;
+        CR_GET_BUFFERED_POINTER(pc, 32);
+        WRITE_DATA(0, GLint, 32);
+        WRITE_DATA(4, GLenum, CR_GETINFOLOGARB_EXTEND_OPCODE);
+        WRITE_DATA(8, VBoxGLhandleARB, obj);
+        WRITE_DATA(12, GLsizei, maxLength);
+        WRITE_NETWORK_POINTER(16, (void *) length);
+        WRITE_NETWORK_POINTER(24, (void *) writeback);
+        WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+        CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei * length, char * infoLog, int * writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    (void) infoLog;
+    CR_GET_BUFFERED_POINTER(pc, 32);
+    WRITE_DATA(0, GLint, 32);
+    WRITE_DATA(4, GLenum, CR_GETPROGRAMINFOLOG_EXTEND_OPCODE);
+    WRITE_DATA(8, GLuint, program);
+    WRITE_DATA(12, GLsizei, bufSize);
+    WRITE_NETWORK_POINTER(16, (void *) length);
+    WRITE_NETWORK_POINTER(24, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei * length, char * infoLog, int * writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    (void) infoLog;
+    CR_GET_BUFFERED_POINTER(pc, 32);
+    WRITE_DATA(0, GLint, 32);
+    WRITE_DATA(4, GLenum, CR_GETSHADERINFOLOG_EXTEND_OPCODE);
+    WRITE_DATA(8, GLuint, shader);
+    WRITE_DATA(12, GLsizei, bufSize);
+    WRITE_NETWORK_POINTER(16, (void *) length);
+    WRITE_NETWORK_POINTER(24, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei * length, char * source, int * writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    (void) source;
+    CR_GET_BUFFERED_POINTER(pc, 32);
+    WRITE_DATA(0, GLint, 32);
+    WRITE_DATA(4, GLenum, CR_GETSHADERSOURCE_EXTEND_OPCODE);
+    WRITE_DATA(8, GLuint, shader);
+    WRITE_DATA(12, GLsizei, bufSize);
+    WRITE_NETWORK_POINTER(16, (void *) length);
+    WRITE_NETWORK_POINTER(24, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetUniformsLocations(GLuint program, GLsizei maxcbData, GLsizei * cbData, GLvoid * pData, int * writeback)
+{
+        CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pData;
+    CR_GET_BUFFERED_POINTER(pc, 32);
+    WRITE_DATA(0, GLint, 32);
+    WRITE_DATA(4, GLenum, CR_GETUNIFORMSLOCATIONS_EXTEND_OPCODE);
+    WRITE_DATA(8, GLuint, program);
+    WRITE_DATA(12, GLsizei, maxcbData);
+    WRITE_NETWORK_POINTER(16, (void *) cbData);
+    WRITE_NETWORK_POINTER(24, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetAttribsLocations(GLuint program, GLsizei maxcbData, GLsizei * cbData, GLvoid * pData, int * writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pData;
+    CR_GET_BUFFERED_POINTER(pc, 32);
+    WRITE_DATA(0, GLint, 32);
+    WRITE_DATA(4, GLenum, CR_GETATTRIBSLOCATIONS_EXTEND_OPCODE);
+    WRITE_DATA(8, GLuint, program);
+    WRITE_DATA(12, GLsizei, maxcbData);
+    WRITE_NETWORK_POINTER(16, (void *) cbData);
+    WRITE_NETWORK_POINTER(24, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetAttribLocation(GLuint program, const char * name, GLint * return_value, int * writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int cbName = crStrlen(name)+1;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(program)+cbName*sizeof(*name)+16;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_GETATTRIBLOCATION_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLuint, program);
+    crMemcpy(data_ptr, name, cbName*sizeof(*name));
+    data_ptr +=  cbName*sizeof(*name);
+    WRITE_NETWORK_POINTER(0, (void *) return_value);
+    WRITE_NETWORK_POINTER(8, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY crPackGetUniformLocation(GLuint program, const char * name, GLint * return_value, int * writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int cbName = crStrlen(name)+1;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(program)+cbName*sizeof(*name)+16;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_GETUNIFORMLOCATION_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLuint, program);
+    crMemcpy(data_ptr, name, cbName*sizeof(*name));
+    data_ptr +=  cbName*sizeof(*name);
+    WRITE_NETWORK_POINTER(0, (void *) return_value);
+    WRITE_NETWORK_POINTER(8, (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_stipple.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_stipple.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_stipple.c	(revision 86648)
@@ -0,0 +1,36 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+#include "cr_mem.h"
+#include "cr_glstate.h"
+
+void PACK_APIENTRY crPackPolygonStipple( const GLubyte *mask )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int nodata = crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+    int packet_length = sizeof(int);
+
+    if (nodata)
+        packet_length += sizeof(GLint);
+    else
+        packet_length += 32*32/8;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length );
+    WRITE_DATA_AI(int, nodata);
+    if (nodata)
+    {
+        WRITE_DATA_AI(GLint, (GLint)(uintptr_t)mask);
+    }
+    else
+    {
+       crMemcpy( data_ptr, mask, 32*32/8 );
+    }
+    WRITE_OPCODE( pc, CR_POLYGONSTIPPLE_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_texture.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_texture.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_texture.c	(revision 86648)
@@ -0,0 +1,1030 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "packer.h"
+#include "cr_pixeldata.h"
+#include "cr_error.h"
+#include "cr_string.h"
+#include "cr_version.h"
+#include "cr_glstate.h"
+
+void PACK_APIENTRY
+crPackTexImage1D(GLenum target, GLint level,
+                 GLint internalformat, GLsizei width, GLint border,
+                 GLenum format, GLenum type, const GLvoid * pixels,
+                 const CRPixelPackState * unpackstate)
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (pixels == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+
+    packet_length =
+        sizeof(target) +
+        sizeof(level) +
+        sizeof(internalformat) +
+        sizeof(width) +
+        sizeof(border) + sizeof(format) + sizeof(type) + sizeof(int) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        packet_length += crImageSize(format, type, width, 1);
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA(0, GLenum, target);
+    WRITE_DATA(4, GLint, level);
+    WRITE_DATA(8, GLint, internalformat);
+    WRITE_DATA(12, GLsizei, width);
+    WRITE_DATA(16, GLint, border);
+    WRITE_DATA(20, GLenum, format);
+    WRITE_DATA(24, GLenum, type);
+    WRITE_DATA(28, int, noimagedata);
+    WRITE_DATA(32, GLint, (GLint)(uintptr_t) pixels);
+
+    if (!noimagedata)
+    {
+        crPixelCopy1D((void *) (data_ptr + 36), format, type,
+                      pixels, format, type, width, unpackstate);
+    }
+
+    crHugePacket(CR_TEXIMAGE1D_OPCODE, data_ptr);
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY
+crPackTexImage2D(GLenum target, GLint level,
+                 GLint internalformat, GLsizei width, GLsizei height,
+                 GLint border, GLenum format, GLenum type,
+                 const GLvoid * pixels, const CRPixelPackState * unpackstate)
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    const int noimagedata = (pixels == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+    const int is_distrib = ((type == GL_TRUE) || (type == GL_FALSE));
+    int distrib_buf_len = 0;
+
+    packet_length =
+        sizeof(target) +
+        sizeof(level) +
+        sizeof(internalformat) +
+        sizeof(width) +
+        sizeof(height) +
+        sizeof(border) + sizeof(format) + sizeof(type) + sizeof(int) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        if (is_distrib)
+        {
+            /* Pixels is a zero-terminated filename, followed by the usual image
+             * data if type == GL_TRUE.
+             * Also note that the image data can't have any unusual pixel packing
+             * parameters.
+             */
+            CRASSERT(format == GL_RGB);
+            distrib_buf_len = crStrlen(pixels) + 1 +
+                ((type == GL_TRUE) ? width * height * 3 : 0);
+            packet_length += distrib_buf_len;
+        }
+        else
+        {
+            packet_length += crImageSize(format, type, width, height);
+        }
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA(0, GLenum, target);
+    WRITE_DATA(4, GLint, level);
+    WRITE_DATA(8, GLint, internalformat);
+    WRITE_DATA(12, GLsizei, width);
+    WRITE_DATA(16, GLsizei, height);
+    WRITE_DATA(20, GLint, border);
+    WRITE_DATA(24, GLenum, format);
+    WRITE_DATA(28, GLenum, type);
+    WRITE_DATA(32, int, noimagedata);
+    WRITE_DATA(36, GLint, (GLint)(uintptr_t) pixels);
+
+    if (!noimagedata)
+    {
+        if (is_distrib)
+        {
+            crMemcpy((void *) (data_ptr + 40), pixels, distrib_buf_len);
+        }
+        else
+        {
+            crPixelCopy2D(width, height,
+                                        (void *) (data_ptr + 40), /* dest image addr */
+                                        format, type,             /* dest image format/type */
+                                        NULL,   /* dst packing (use default params) */
+                                        pixels,       /* src image addr */
+                                        format, type, /* src image format/type */
+                                        unpackstate);   /* src packing */
+        }
+    }
+
+    crHugePacket(CR_TEXIMAGE2D_OPCODE, data_ptr);
+    crPackFree( data_ptr );
+}
+
+#if defined( GL_EXT_texture3D )
+void PACK_APIENTRY 
+crPackTexImage3DEXT(GLenum target, GLint level,
+                    GLenum internalformat,
+                    GLsizei width, GLsizei height, GLsizei depth, GLint border,
+                    GLenum format, GLenum type, const GLvoid *pixels,
+                    const CRPixelPackState *unpackstate )
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (pixels == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+    int is_distrib = ( (type == GL_TRUE) || (type == GL_FALSE) ) ;
+    int distrib_buf_len = 0;
+    int tex_size = 0;
+
+    packet_length =
+        sizeof( target ) +
+        sizeof( level ) +
+        sizeof( internalformat ) +
+        sizeof( width ) +
+        sizeof( height ) +
+        sizeof( depth ) +
+        sizeof( border ) +
+        sizeof( format ) +
+        sizeof( type ) +
+        sizeof( int ) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        if ( is_distrib )
+        {
+            distrib_buf_len = crStrlen( pixels ) + 1 +
+                ( (type == GL_TRUE) ? width*height*3 : 0 ) ;
+            packet_length += distrib_buf_len ;
+        }
+        else
+        {
+            tex_size = crTextureSize( format, type, width, height, depth );
+            packet_length += tex_size;
+        }
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+    WRITE_DATA( 0, GLenum, target );
+    WRITE_DATA( 4, GLint, level );
+    WRITE_DATA( 8, GLint, internalformat );
+    WRITE_DATA( 12, GLsizei, width );
+    WRITE_DATA( 16, GLsizei, height );
+    WRITE_DATA( 20, GLsizei, depth );
+    WRITE_DATA( 24, GLint, border );
+    WRITE_DATA( 28, GLenum, format );
+    WRITE_DATA( 32, GLenum, type );
+    WRITE_DATA( 36, int, noimagedata );
+    WRITE_DATA( 40, GLint, (GLint)(uintptr_t) pixels);
+
+    if (!noimagedata)
+    {
+        if ( is_distrib )
+        {
+            crMemcpy( (void*)(data_ptr + 44), pixels, distrib_buf_len ) ;
+        }
+        else
+        {               
+            crPixelCopy3D( width, height, depth,
+                                         (void *)(data_ptr + 44), format, type, NULL,
+                                         pixels, format, type, unpackstate );
+        }
+    }
+
+    crHugePacket( CR_TEXIMAGE3DEXT_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+#endif /* GL_EXT_texture3D */
+
+#ifdef CR_OPENGL_VERSION_1_2
+void PACK_APIENTRY 
+crPackTexImage3D(GLenum target, GLint level,
+                 GLint internalformat,
+                 GLsizei width, GLsizei height,
+                 GLsizei depth, GLint border,
+                 GLenum format, GLenum type,
+                 const GLvoid *pixels,
+                 const CRPixelPackState *unpackstate )
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (pixels == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+    int is_distrib = ( (type == GL_TRUE) || (type == GL_FALSE) ) ;
+    int distrib_buf_len = 0;
+    int tex_size = 0;
+
+    packet_length =
+        sizeof( target ) +
+        sizeof( level ) +
+        sizeof( internalformat ) +
+        sizeof( width ) +
+        sizeof( height ) +
+        sizeof( depth ) +
+        sizeof( border ) +
+        sizeof( format ) +
+        sizeof( type ) +
+        sizeof( int ) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        if ( is_distrib )
+        {
+            distrib_buf_len = crStrlen( pixels ) + 1 +
+                ( (type == GL_TRUE) ? width*height*3 : 0 ) ;
+            packet_length += distrib_buf_len ;
+        }
+        else
+        {
+            tex_size = crTextureSize( format, type, width, height, depth );
+            packet_length += tex_size;
+        }
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+    WRITE_DATA( 0, GLenum, target );
+    WRITE_DATA( 4, GLint, level );
+    WRITE_DATA( 8, GLint, internalformat );
+    WRITE_DATA( 12, GLsizei, width );
+    WRITE_DATA( 16, GLsizei, height );
+    WRITE_DATA( 20, GLsizei, depth );
+    WRITE_DATA( 24, GLint, border );
+    WRITE_DATA( 28, GLenum, format );
+    WRITE_DATA( 32, GLenum, type );
+    WRITE_DATA( 36, int, noimagedata );
+    WRITE_DATA( 40, GLint, (GLint)(uintptr_t) pixels);
+
+    if (!noimagedata)
+    {
+        if ( is_distrib )
+        {
+            crMemcpy( (void*)(data_ptr + 44), pixels, distrib_buf_len ) ;
+        }
+        else
+        {               
+            crPixelCopy3D( width, height, depth,
+                                         (void *)(data_ptr + 44), format, type, NULL,
+                                         pixels, format, type, unpackstate );
+        }
+    }
+
+    crHugePacket( CR_TEXIMAGE3D_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+#endif /* CR_OPENGL_VERSION_1_2 */
+
+
+void PACK_APIENTRY
+crPackDeleteTextures(GLsizei n, const GLuint * textures)
+{
+    unsigned char *data_ptr;
+    int packet_length =
+        sizeof( n ) +
+        n * sizeof( *textures );
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA(0, GLsizei, n);
+    crMemcpy(data_ptr + 4, textures, n * sizeof(*textures));
+    crHugePacket(CR_DELETETEXTURES_OPCODE, data_ptr);
+    crPackFree( data_ptr );
+}
+
+static void
+__handleTexEnvData(GLenum target, GLenum pname, const GLfloat * params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int params_length;
+
+    int packet_length =
+        sizeof( int ) +
+        sizeof( target ) +
+        sizeof( pname );
+
+    if (pname == GL_TEXTURE_ENV_COLOR)
+    {
+        params_length = 4 * sizeof(*params);
+    }
+    else
+    {
+        params_length = sizeof(*params);
+    }
+
+    packet_length += params_length;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(sizeof(int) + 0, GLenum, target);
+    WRITE_DATA(sizeof(int) + 4, GLenum, pname);
+    crMemcpy(data_ptr + sizeof(int) + 8, params, params_length);
+}
+
+
+void PACK_APIENTRY
+crPackTexEnvfv(GLenum target, GLenum pname, const GLfloat * params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    __handleTexEnvData(target, pname, params);
+    WRITE_OPCODE(pc, CR_TEXENVFV_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY
+crPackTexEnviv(GLenum target, GLenum pname, const GLint * params)
+{
+    /* floats and ints are the same size, so the packing should be the same */
+    CR_GET_PACKER_CONTEXT(pc);
+    __handleTexEnvData(target, pname, (const GLfloat *) params);
+    WRITE_OPCODE(pc, CR_TEXENVIV_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY
+crPackTexEnvf(GLenum target, GLenum pname, GLfloat param)
+{
+    crPackTexEnvfv(target, pname, &param);
+}
+
+void PACK_APIENTRY
+crPackTexEnvi(GLenum target, GLenum pname, GLint param)
+{
+    crPackTexEnviv(target, pname, &param);
+}
+
+void PACK_APIENTRY
+crPackPrioritizeTextures(GLsizei n, const GLuint * textures,
+                         const GLclampf * priorities)
+{
+    unsigned char *data_ptr;
+    int packet_length =
+        sizeof(n) +
+        n * sizeof(*textures) +
+        n * sizeof(*priorities);
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+
+    WRITE_DATA(0, GLsizei, n);
+    crMemcpy(data_ptr + 4, textures, n * sizeof(*textures));
+    crMemcpy(data_ptr + 4 + n * sizeof(*textures),
+                 priorities, n * sizeof(*priorities));
+
+    crHugePacket(CR_PRIORITIZETEXTURES_OPCODE, data_ptr);
+    crPackFree( data_ptr );
+}
+
+static void
+__handleTexGenData(GLenum coord, GLenum pname,
+                                     int sizeof_param, const GLvoid * params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length =
+        sizeof(int) + sizeof(coord) + sizeof(pname) + sizeof_param;
+    int params_length = sizeof_param;
+    if (pname == GL_OBJECT_PLANE || pname == GL_EYE_PLANE)
+    {
+        packet_length += 3 * sizeof_param;
+        params_length += 3 * sizeof_param;
+    }
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(sizeof(int) + 0, GLenum, coord);
+    WRITE_DATA(sizeof(int) + 4, GLenum, pname);
+    crMemcpy(data_ptr + sizeof(int) + 8, params, params_length);
+}
+
+void PACK_APIENTRY
+crPackTexGendv(GLenum coord, GLenum pname, const GLdouble * params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    __handleTexGenData(coord, pname, sizeof(*params), params);
+    WRITE_OPCODE(pc, CR_TEXGENDV_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY
+crPackTexGenfv(GLenum coord, GLenum pname, const GLfloat * params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    __handleTexGenData(coord, pname, sizeof(*params), params);
+    WRITE_OPCODE(pc, CR_TEXGENFV_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY
+crPackTexGeniv(GLenum coord, GLenum pname, const GLint * params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    __handleTexGenData(coord, pname, sizeof(*params), params);
+    WRITE_OPCODE(pc, CR_TEXGENIV_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+void PACK_APIENTRY
+crPackTexGend(GLenum coord, GLenum pname, GLdouble param)
+{
+    crPackTexGendv(coord, pname, &param);
+}
+
+void PACK_APIENTRY
+crPackTexGenf(GLenum coord, GLenum pname, GLfloat param)
+{
+    crPackTexGenfv(coord, pname, &param);
+}
+
+void PACK_APIENTRY
+crPackTexGeni(GLenum coord, GLenum pname, GLint param)
+{
+    crPackTexGeniv(coord, pname, &param);
+}
+
+static GLboolean
+__handleTexParameterData(GLenum target, GLenum pname, const GLfloat * params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int) + sizeof(target) + sizeof(pname);
+    int num_params = 0;
+
+    switch (pname)
+    {
+    case GL_TEXTURE_MIN_FILTER:
+    case GL_TEXTURE_MAG_FILTER:
+    case GL_TEXTURE_WRAP_R:
+    case GL_TEXTURE_WRAP_S:
+    case GL_TEXTURE_WRAP_T:
+#ifdef GL_TEXTURE_PRIORITY
+    case GL_TEXTURE_PRIORITY:
+#endif
+      num_params = 1;
+        break;
+    case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+        num_params = 1;
+        break;
+    case GL_TEXTURE_MIN_LOD:
+    case GL_TEXTURE_MAX_LOD:
+    case GL_TEXTURE_BASE_LEVEL:
+    case GL_TEXTURE_MAX_LEVEL:
+        num_params = 1;
+        break;
+    case GL_TEXTURE_BORDER_COLOR:
+        num_params = 4;
+        break;
+#ifdef CR_ARB_shadow
+    case GL_TEXTURE_COMPARE_MODE_ARB:
+    case GL_TEXTURE_COMPARE_FUNC_ARB:
+        num_params = 1;
+        break;
+#endif
+#ifdef CR_ARB_shadow_ambient
+    case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
+        num_params = 1;
+        break;
+#endif
+#ifdef CR_ARB_depth_texture
+    case GL_DEPTH_TEXTURE_MODE_ARB:
+        num_params = 1;
+        break;
+#endif
+#ifdef CR_SGIS_generate_mipmap
+    case GL_GENERATE_MIPMAP_SGIS:
+        num_params = 1;
+        break;
+#endif
+    default:
+        num_params = __packTexParameterNumParams(pname);
+        if (!num_params)
+        {
+            __PackError(__LINE__, __FILE__, GL_INVALID_ENUM,
+                                    "crPackTexParameter(bad pname)");
+            return GL_FALSE;
+        }
+    }
+    packet_length += num_params * sizeof(*params);
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(sizeof(int) + 0, GLenum, target);
+    WRITE_DATA(sizeof(int) + 4, GLenum, pname);
+    crMemcpy(data_ptr + sizeof(int) + 8, params, num_params * sizeof(*params));
+    return GL_TRUE;
+}
+
+void PACK_APIENTRY
+crPackTexParameterfv(GLenum target, GLenum pname, const GLfloat * params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    if (__handleTexParameterData(target, pname, params))
+    {
+        WRITE_OPCODE(pc, CR_TEXPARAMETERFV_OPCODE);
+        CR_UNLOCK_PACKER_CONTEXT(pc);
+    }
+}
+
+void PACK_APIENTRY
+crPackTexParameteriv(GLenum target, GLenum pname, const GLint * params)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    if (__handleTexParameterData(target, pname, (GLfloat *) params))
+    {
+        WRITE_OPCODE(pc, CR_TEXPARAMETERIV_OPCODE);
+        CR_UNLOCK_PACKER_CONTEXT(pc);
+    }
+}
+
+void PACK_APIENTRY
+crPackTexParameterf(GLenum target, GLenum pname, GLfloat param)
+{
+    crPackTexParameterfv(target, pname, &param);
+}
+
+void PACK_APIENTRY
+crPackTexParameteri(GLenum target, GLenum pname, GLint param)
+{
+    crPackTexParameteriv(target, pname, &param);
+}
+
+#ifdef CR_OPENGL_VERSION_1_2
+void PACK_APIENTRY
+crPackTexSubImage3D(GLenum target, GLint level,
+                    GLint xoffset, GLint yoffset, GLint zoffset,
+                    GLsizei width, GLsizei height, GLsizei depth,
+                    GLenum format, GLenum type, const GLvoid * pixels,
+                    const CRPixelPackState * unpackstate)
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (pixels == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+
+    packet_length =
+        sizeof(target) +
+        sizeof(level) +
+        sizeof(xoffset) +
+        sizeof(yoffset) +
+        sizeof(zoffset) +
+        sizeof(width) +
+        sizeof(height) +
+        sizeof(depth) +
+        sizeof(format) +
+        sizeof(type) + sizeof(int) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        packet_length += crTextureSize(format, type, width, height, depth);
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA(0, GLenum, target);
+    WRITE_DATA(4, GLint, level);
+    WRITE_DATA(8, GLint, xoffset);
+    WRITE_DATA(12, GLint, yoffset);
+    WRITE_DATA(16, GLint, zoffset);
+    WRITE_DATA(20, GLsizei, width);
+    WRITE_DATA(24, GLsizei, height);
+    WRITE_DATA(28, GLsizei, depth);
+    WRITE_DATA(32, GLenum, format);
+    WRITE_DATA(36, GLenum, type);
+    WRITE_DATA(40, GLint, noimagedata);
+    WRITE_DATA(44, GLint, (GLint)(uintptr_t) pixels);
+
+    if (!noimagedata)
+    {
+        crPixelCopy3D(width, height, depth, (GLvoid *) (data_ptr + 48), format, type, NULL, /* dst */
+                      pixels, format, type, unpackstate); /* src */
+    }
+
+    crHugePacket(CR_TEXSUBIMAGE3D_OPCODE, data_ptr);
+    crPackFree( data_ptr );
+}
+#endif /* CR_OPENGL_VERSION_1_2 */
+
+void PACK_APIENTRY
+crPackTexSubImage2D(GLenum target, GLint level,
+                    GLint xoffset, GLint yoffset, GLsizei width,
+                    GLsizei height, GLenum format, GLenum type,
+                    const GLvoid * pixels,
+                    const CRPixelPackState * unpackstate)
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (pixels == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+
+    packet_length =
+        sizeof(target) +
+        sizeof(level) +
+        sizeof(xoffset) +
+        sizeof(yoffset) +
+        sizeof(width) +
+        sizeof(height) +
+        sizeof(format) + sizeof(type) + sizeof(int) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        packet_length += crImageSize(format, type, width, height);
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA(0, GLenum, target);
+    WRITE_DATA(4, GLint, level);
+    WRITE_DATA(8, GLint, xoffset);
+    WRITE_DATA(12, GLint, yoffset);
+    WRITE_DATA(16, GLsizei, width);
+    WRITE_DATA(20, GLsizei, height);
+    WRITE_DATA(24, GLenum, format);
+    WRITE_DATA(28, GLenum, type);
+    WRITE_DATA(32, GLint, noimagedata);
+    WRITE_DATA(36, GLint, (GLint)(uintptr_t) pixels);
+
+    if (!noimagedata)
+    {
+        crPixelCopy2D(width, height, (GLvoid *) (data_ptr + 40), format, type, NULL,    /* dst */
+                      pixels, format, type, unpackstate); /* src */
+    }
+
+    crHugePacket(CR_TEXSUBIMAGE2D_OPCODE, data_ptr);
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY
+crPackTexSubImage1D(GLenum target, GLint level,
+                                        GLint xoffset, GLsizei width, GLenum format, GLenum type,
+                                        const GLvoid * pixels,
+                                        const CRPixelPackState * unpackstate)
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (pixels == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+
+    packet_length =
+        sizeof(target) +
+        sizeof(level) +
+        sizeof(xoffset) +
+        sizeof(width) +
+        sizeof(format) + sizeof(type) + sizeof(int) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        packet_length += crImageSize(format, type, width, 1);
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc(packet_length);
+    WRITE_DATA(0, GLenum, target);
+    WRITE_DATA(4, GLint, level);
+    WRITE_DATA(8, GLint, xoffset);
+    WRITE_DATA(12, GLsizei, width);
+    WRITE_DATA(16, GLenum, format);
+    WRITE_DATA(20, GLenum, type);
+    WRITE_DATA(24, GLint, noimagedata);
+    WRITE_DATA(28, GLint, (GLint)(uintptr_t) pixels);
+
+    if (!noimagedata)
+    {
+        crPixelCopy1D((GLvoid *) (data_ptr + 32), format, type,
+                      pixels, format, type, width, unpackstate);
+    }
+
+    crHugePacket(CR_TEXSUBIMAGE1D_OPCODE, data_ptr);
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY
+crPackAreTexturesResident(GLsizei n, const GLuint * textures,
+                                                    GLboolean * residences, GLboolean * return_val,
+                                                    int *writeback)
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length;
+
+    (void) return_val; /* Caller must compute this from residences!!! */
+
+    packet_length = sizeof(int) +   /* packet length */
+        sizeof(GLenum) +                        /* extend-o opcode */
+        sizeof(n) +                                 /* num_textures */
+        n * sizeof(*textures) +         /* textures */
+        8 + 8;
+
+    CR_GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA(0, int, packet_length);
+    WRITE_DATA(4, GLenum, CR_ARETEXTURESRESIDENT_EXTEND_OPCODE);
+    WRITE_DATA(8, GLsizei, n);
+    crMemcpy(data_ptr + 12, textures, n * sizeof(*textures));
+    WRITE_NETWORK_POINTER(12 + n * sizeof(*textures),   (void *) residences);
+    WRITE_NETWORK_POINTER(20 + n * sizeof(*textures), (void *) writeback);
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_CMDBLOCK_CHECK_FLUSH(pc);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
+
+/**********************************************************************
+ * Texture compression
+ */
+
+void PACK_APIENTRY crPackCompressedTexImage1DARB( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imagesize, const GLvoid *data )
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (data == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+
+    /* All extended opcodes have their first 8 bytes predefined:
+     * the first four indicate the packet size, and the next four
+     * indicate the actual extended opcode.
+     */
+    packet_length = 
+        sizeof( GLenum) + /* extended opcode */
+        sizeof( target ) +
+        sizeof( level ) +
+        sizeof( internalformat ) +
+        sizeof( width ) + 
+        sizeof( border ) +
+        sizeof( imagesize ) +
+        sizeof( int ) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        packet_length += imagesize;
+    }
+
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+    WRITE_DATA( 0, GLenum, CR_COMPRESSEDTEXIMAGE1DARB_EXTEND_OPCODE );
+    WRITE_DATA( 4, GLenum, target );
+    WRITE_DATA( 8, GLint, level );
+    WRITE_DATA( 12, GLint, internalformat );
+    WRITE_DATA( 16, GLsizei, width );
+    WRITE_DATA( 20, GLint, border );
+    WRITE_DATA( 24, GLsizei, imagesize );
+    WRITE_DATA( 28, int, noimagedata );
+    WRITE_DATA( 32, GLint, (GLint)(uintptr_t) data);
+
+    if (!noimagedata) {
+        crMemcpy( (void *)(data_ptr + 36), (void *)data, imagesize);
+    }
+
+    crHugePacket( CR_EXTEND_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackCompressedTexImage2DARB( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imagesize, const GLvoid *data )
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (data == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+
+    /* All extended opcodes have their first 8 bytes predefined:
+     * the first four indicate the packet size, and the next four
+     * indicate the actual extended opcode.
+     */
+    packet_length = 
+        sizeof( GLenum) + /* extended opcode */
+        sizeof( target ) +
+        sizeof( level ) +
+        sizeof( internalformat ) +
+        sizeof( width ) + 
+        sizeof( height ) + 
+        sizeof( border ) +
+        sizeof( imagesize ) +
+        sizeof( int ) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        packet_length += imagesize;
+    }
+
+    /*crDebug( "Compressing that shit: %d", level );*/
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+    WRITE_DATA( 0, GLenum, CR_COMPRESSEDTEXIMAGE2DARB_EXTEND_OPCODE );
+    WRITE_DATA( 4, GLenum, target );
+    WRITE_DATA( 8, GLint, level );
+    WRITE_DATA( 12, GLint, internalformat );
+    WRITE_DATA( 16, GLsizei, width );
+    WRITE_DATA( 20, GLsizei, height );
+    WRITE_DATA( 24, GLint, border );
+    WRITE_DATA( 28, GLsizei, imagesize );
+    WRITE_DATA( 32, int, noimagedata );
+    WRITE_DATA( 36, GLint, (GLint)(uintptr_t) data);
+
+    if (!noimagedata) {
+        crMemcpy( (void *)(data_ptr + 40), (void *)data, imagesize);
+    }
+
+    crHugePacket( CR_EXTEND_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackCompressedTexImage3DARB( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imagesize, const GLvoid *data )
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (data == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+
+    /* All extended opcodes have their first 8 bytes predefined:
+     * the first four indicate the packet size, and the next four
+     * indicate the actual extended opcode.
+     */
+    packet_length = 
+        sizeof( GLenum) + /* extended opcode */
+        sizeof( target ) +
+        sizeof( level ) +
+        sizeof( internalformat ) +
+        sizeof( width ) + 
+        sizeof( height ) + 
+        sizeof( depth ) + 
+        sizeof( border ) +
+        sizeof( imagesize ) +
+        sizeof( int ) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        packet_length += imagesize;
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+    WRITE_DATA( 0, GLenum, CR_COMPRESSEDTEXIMAGE3DARB_EXTEND_OPCODE );
+    WRITE_DATA( 4, GLenum, target );
+    WRITE_DATA( 8, GLint, level );
+    WRITE_DATA( 12, GLint, internalformat );
+    WRITE_DATA( 16, GLsizei, width );
+    WRITE_DATA( 20, GLsizei, height );
+    WRITE_DATA( 24, GLsizei, depth );
+    WRITE_DATA( 28, GLint, border );
+    WRITE_DATA( 32, GLsizei, imagesize );
+    WRITE_DATA( 36, int, noimagedata );
+    WRITE_DATA( 40, GLint, (GLint)(uintptr_t) data);
+
+    if (!noimagedata) {
+        crMemcpy( (void *)(data_ptr + 44), (void *)data, imagesize);
+    }
+
+    crHugePacket( CR_EXTEND_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackCompressedTexSubImage1DARB( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imagesize, const GLvoid *data )
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (data == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+
+    /* All extended opcodes have their first 8 bytes predefined:
+     * the first four indicate the packet size, and the next four
+     * indicate the actual extended opcode.
+     */
+    packet_length = 
+        sizeof( GLenum) + /* extended opcode */
+        sizeof( target ) +
+        sizeof( level ) +
+        sizeof( xoffset ) +
+        sizeof( width ) + 
+        sizeof( format ) +
+        sizeof( imagesize ) +
+        sizeof( int ) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        packet_length += imagesize;
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+    WRITE_DATA( 0, GLenum, CR_COMPRESSEDTEXSUBIMAGE1DARB_EXTEND_OPCODE );
+    WRITE_DATA( 4, GLenum, target );
+    WRITE_DATA( 8, GLint, level );
+    WRITE_DATA( 12, GLint, xoffset );
+    WRITE_DATA( 16, GLsizei, width );
+    WRITE_DATA( 20, GLenum, format );
+    WRITE_DATA( 24, GLsizei, imagesize );
+    WRITE_DATA( 28, int, noimagedata );
+    WRITE_DATA( 32, GLint, (GLint)(uintptr_t) data);
+
+    if (!noimagedata) {
+        crMemcpy( (void *)(data_ptr + 36), (void *)data, imagesize);
+    }
+
+    crHugePacket( CR_EXTEND_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackCompressedTexSubImage2DARB( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imagesize, const GLvoid *data )
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (data == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+
+    /* All extended opcodes have their first 8 bytes predefined:
+     * the first four indicate the packet size, and the next four
+     * indicate the actual extended opcode.
+     */
+    packet_length = 
+        sizeof( GLenum) + /* extended opcode */
+        sizeof( target ) +
+        sizeof( level ) +
+        sizeof( xoffset ) +
+        sizeof( yoffset ) +
+        sizeof( width ) + 
+        sizeof( height ) + 
+        sizeof( format ) +
+        sizeof( imagesize ) +
+        sizeof( int ) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        packet_length += imagesize;
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+    WRITE_DATA( 0, GLenum, CR_COMPRESSEDTEXSUBIMAGE2DARB_EXTEND_OPCODE );
+    WRITE_DATA( 4, GLenum, target );
+    WRITE_DATA( 8, GLint, level );
+    WRITE_DATA( 12, GLint, xoffset );
+    WRITE_DATA( 16, GLint, yoffset );
+    WRITE_DATA( 20, GLsizei, width );
+    WRITE_DATA( 24, GLsizei, height );
+    WRITE_DATA( 28, GLenum, format );
+    WRITE_DATA( 32, GLsizei, imagesize );
+    WRITE_DATA( 36, int, noimagedata );
+    WRITE_DATA( 40, GLint, (GLint)(uintptr_t) data);
+
+    if (!noimagedata) {
+        crMemcpy( (void *)(data_ptr + 44), (void *)data, imagesize);
+    }
+
+    crHugePacket( CR_EXTEND_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackCompressedTexSubImage3DARB( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imagesize, const GLvoid *data )
+{
+    unsigned char *data_ptr;
+    int packet_length;
+    int noimagedata = (data == NULL) || crStateIsBufferBound(g_pStateTracker, GL_PIXEL_UNPACK_BUFFER_ARB);
+
+    /* All extended opcodes have their first 8 bytes predefined:
+     * the first four indicate the packet size, and the next four
+     * indicate the actual extended opcode.
+     */
+    packet_length = 
+        sizeof( GLenum) + /* extended opcode */
+        sizeof( target ) +
+        sizeof( level ) +
+        sizeof( xoffset ) +
+        sizeof( yoffset ) +
+        sizeof( zoffset ) +
+        sizeof( width ) + 
+        sizeof( height ) + 
+        sizeof( depth ) + 
+        sizeof( format ) +
+        sizeof( imagesize ) +
+        sizeof( int ) + sizeof(GLint);
+
+    if (!noimagedata)
+    {
+        packet_length += imagesize;
+    }
+
+    data_ptr = (unsigned char *) crPackAlloc( packet_length );
+    WRITE_DATA( 0, GLenum, CR_COMPRESSEDTEXSUBIMAGE3DARB_EXTEND_OPCODE );
+    WRITE_DATA( 4, GLenum, target );
+    WRITE_DATA( 8, GLint, level );
+    WRITE_DATA( 12, GLint, xoffset );
+    WRITE_DATA( 16, GLint, yoffset );
+    WRITE_DATA( 20, GLint, zoffset );
+    WRITE_DATA( 24, GLsizei, width );
+    WRITE_DATA( 28, GLsizei, height );
+    WRITE_DATA( 32, GLsizei, depth );
+    WRITE_DATA( 36, GLenum, format );
+    WRITE_DATA( 40, GLsizei, imagesize );
+    WRITE_DATA( 44, int, noimagedata );
+    WRITE_DATA( 48, GLint, (GLint)(uintptr_t) data);
+
+    if (!noimagedata) {
+        crMemcpy( (void *)(data_ptr + 52), (void *)data, imagesize);
+    }
+
+    crHugePacket( CR_EXTEND_OPCODE, data_ptr );
+    crPackFree( data_ptr );
+}
+
+void PACK_APIENTRY crPackGetCompressedTexImageARB( GLenum target, GLint level, GLvoid *img, int *writeback )
+{
+    CR_GET_PACKER_CONTEXT(pc);
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(target)+sizeof(level)+2*8;
+    unsigned char *data_ptr;
+    CR_GET_BUFFERED_POINTER( pc, packet_length );
+
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_GETCOMPRESSEDTEXIMAGEARB_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLenum, target);
+    WRITE_DATA_AI(GLint, level);
+    WRITE_NETWORK_POINTER(0, (void *) img );
+    WRITE_NETWORK_POINTER(8, (void *) writeback );
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c	(revision 86648)
@@ -0,0 +1,52 @@
+/* $Id$ */
+/** @file
+ * VBox Packing VisibleRegion information
+ */
+
+/*
+ * Copyright (C) 2008-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+#include "cr_error.h"
+
+#ifdef WINDOWS
+# include <iprt/win/windows.h>
+#endif
+
+void PACK_APIENTRY crPackWindowVisibleRegion( CR_PACKER_CONTEXT_ARGDECL GLint window, GLint cRects, const GLint * pRects )
+{
+    GLint i, size, cnt;
+
+    CR_GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    (void) pc;
+    size = 16 + cRects * 4 * sizeof(GLint);
+    CR_GET_BUFFERED_POINTER( pc, size );
+    WRITE_DATA( 0, GLint, size );
+    WRITE_DATA( 4, GLenum, CR_WINDOWVISIBLEREGION_EXTEND_OPCODE );
+    WRITE_DATA( 8, GLint, window );
+    WRITE_DATA( 12, GLint, cRects );
+
+    cnt = 16;
+    for (i=0; i<cRects; ++i)
+    {
+        WRITE_DATA(cnt, GLint, (GLint) pRects[4*i+0]);
+        WRITE_DATA(cnt+4, GLint, (GLint) pRects[4*i+1]);
+        WRITE_DATA(cnt+8, GLint, (GLint) pRects[4*i+2]);
+        WRITE_DATA(cnt+12, GLint, (GLint) pRects[4*i+3]);
+        cnt += 16;
+    }
+    WRITE_OPCODE( pc, CR_EXTEND_OPCODE );
+    CR_UNLOCK_PACKER_CONTEXT(pc);
+}
+
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/packer.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/packer.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/packer.h	(revision 86648)
@@ -0,0 +1,27 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_PACKER_H
+#define CR_PACKER_H
+
+#ifdef DLLDATA
+#undef DLLDATA
+#endif
+#define DLLDATA(type) DECLEXPORT(type)
+
+#include <stdio.h>  /* for sprintf() */
+#include "cr_pack.h"
+#include "cr_packfunctions.h"
+#include "packer_extensions.h"
+#include "cr_mem.h"
+
+#ifndef IN_RING0
+extern void __PackError( int line, const char *file, GLenum error, const char *info );
+#else
+# define __PackError( line, file, error, info) do { AssertReleaseFailed(); } while (0)
+#endif
+
+#endif /* CR_PACKER_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/packer.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/packer.py	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/packer.py	(revision 86648)
@@ -0,0 +1,258 @@
+# Copyright (c) 2001, Stanford University
+# All rights reserved.
+#
+# See the file LICENSE.txt for information on redistributing this software.
+
+# This script generates the packer.c file from the gl_header.parsed file.
+
+from __future__ import print_function
+import sys, string, re
+
+import apiutil
+
+
+
+def WriteData( offset, arg_type, arg_name ):
+    """Return a string to write a variable to the packing buffer."""
+    retval = 9
+    if apiutil.IsPointer(arg_type):
+        retval = "\tWRITE_NETWORK_POINTER(%d, (void *) %s);" % (offset, arg_name )
+    else:   
+        if arg_type == "GLdouble" or arg_type == "GLclampd":
+            retval = "\tWRITE_DOUBLE(%d, %s);" % (offset, arg_name)
+        else:
+            retval = "\tWRITE_DATA(%d, %s, %s);" % (offset, arg_type, arg_name)
+    if retval == 9:
+        print >>sys.stderr, "no retval for %s %s" % (arg_name, arg_type)
+        assert 0
+    return retval
+
+
+def UpdateCurrentPointer( func_name ):
+    m = re.search( r"^(Color|Normal)([1234])(ub|b|us|s|ui|i|f|d)$", func_name )
+    if m :
+        k = m.group(1)
+        name = '%s%s' % (k[:1].lower(),k[1:])
+        type = m.group(3) + m.group(2)
+        print("\tpc->current.c.%s.%s = data_ptr;" % (name,type))
+        return
+
+    m = re.search( r"^(SecondaryColor)(3)(ub|b|us|s|ui|i|f|d)EXT$", func_name )
+    if m :
+        k = m.group(1)
+        name = 'secondaryColor'
+        type = m.group(3) + m.group(2)
+        print("\tpc->current.c.%s.%s = data_ptr;" % (name,type))
+        return
+
+    m = re.search( r"^(TexCoord)([1234])(ub|b|us|s|ui|i|f|d)$", func_name )
+    if m :
+        k = m.group(1)
+        name = 'texCoord'
+        type = m.group(3) + m.group(2)
+        print("\tpc->current.c.%s.%s[0] = data_ptr;" % (name,type))
+        return
+
+    m = re.search( r"^(MultiTexCoord)([1234])(ub|b|us|s|ui|i|f|d)ARB$", func_name )
+    if m :
+        k = m.group(1)
+        name = 'texCoord'
+        type = m.group(3) + m.group(2)
+        print("\tpc->current.c.%s.%s[texture-GL_TEXTURE0_ARB] = data_ptr + 4;" % (name,type))
+        return
+
+    m = re.match( r"^(Index)(ub|b|us|s|ui|i|f|d)$", func_name )
+    if m :
+        k = m.group(1)
+        name = 'index'
+        type = m.group(2) + "1"
+        print("\tpc->current.c.%s.%s = data_ptr;" % (name,type))
+        return
+
+    m = re.match( r"^(EdgeFlag)$", func_name )
+    if m :
+        k = m.group(1)
+        name = 'edgeFlag'
+        type = "l1"
+        print("\tpc->current.c.%s.%s = data_ptr;" % (name,type))
+        return
+
+    m = re.match( r"^(FogCoord)(f|d)EXT$", func_name )
+    if m :
+        k = m.group(1)
+        name = 'fogCoord'
+        type = m.group(2) + "1"
+        print("\tpc->current.c.%s.%s = data_ptr;" % (name,type))
+        return
+
+
+    m = re.search( r"^(VertexAttrib)([1234])N?(ub|b|s|f|d)(NV|ARB)$", func_name )
+    if m :
+        k = m.group(1)
+        name = 'vertexAttrib'
+        type = m.group(3) + m.group(2)
+        # Add 12 to skip the packet length, opcode and index fields
+        print("\tpc->current.c.%s.%s[index] = data_ptr + 4;" % (name,type))
+        if m.group(4) == "ARB" or m.group(4) == "NV":
+            print("\tpc->current.attribsUsedMask |= (1 << index);")
+            print("\tpc->current.changedVertexAttrib |= (1 << index);")
+        return
+
+
+
+def PrintFunc( func_name, params, can_have_pointers ):
+    """Emit a packer function."""
+    print('void PACK_APIENTRY crPack%s(%s)' % (func_name, apiutil.MakeDeclarationStringWithContext('CR_PACKER_CONTEXT', params)))
+    print('{')
+    print('\tCR_GET_PACKER_CONTEXT(pc);')
+
+    # Save original function name
+    orig_func_name = func_name
+
+    # Convert to a non-vector version of the function if possible
+    func_name = apiutil.NonVectorFunction( func_name )
+    if not func_name:
+        func_name = orig_func_name
+
+    # Check if there are any pointer parameters.
+    # That's usually a problem so we'll emit an error function.
+    nonVecParams = apiutil.Parameters(func_name)
+    bail_out = 0
+    for (name, type, vecSize) in nonVecParams:
+        if apiutil.IsPointer(type) and vecSize == 0 and not can_have_pointers:
+            bail_out = 1
+    if bail_out:
+        for (name, type, vecSize) in nonVecParams:
+            print('\t(void)%s;' % (name))
+        print('\tcrError ( "%s needs to be special cased %d %d!");' % (func_name, vecSize, can_have_pointers))
+        print('\t(void) pc;')
+        print('}')
+        # XXX we should really abort here
+        return
+
+    if "extpack" in apiutil.ChromiumProps(func_name):
+        is_extended = 1
+    else:
+        is_extended = 0
+
+
+    print("\tunsigned char *data_ptr = NULL;")
+    print('\t(void) pc;')
+    #if func_name == "Enable" or func_name == "Disable":
+    #   print "\tCRASSERT(!pc->buffer.geometry_only); /* sanity check */"
+
+    for index in range(0,len(params)):
+        (name, type, vecSize) = params[index]
+        if vecSize>0 and func_name!=orig_func_name:
+            print("    if (!%s) {" % name)
+            # Know the reason for this one, so avoid the spam.
+            if orig_func_name != "SecondaryColor3fvEXT":
+                print("        crDebug(\"App passed NULL as %s for %s\");" % (name, orig_func_name))
+            print("        return;")
+            print("    }")
+
+    packet_length = apiutil.PacketLength(nonVecParams)
+
+    if packet_length == 0 and not is_extended:
+        print("\tCR_GET_BUFFERED_POINTER_NO_ARGS(pc);")
+    elif func_name[:9] == "Translate" or func_name[:5] == "Color":
+        # XXX WTF is the purpose of this?
+        if is_extended:
+            packet_length += 8
+        print("\tCR_GET_BUFFERED_POINTER_NO_BEGINEND_FLUSH(pc, %d, GL_TRUE);" % packet_length)
+    else:
+        if is_extended:
+            packet_length += 8
+        print("\tCR_GET_BUFFERED_POINTER(pc, %d);" % packet_length)
+    UpdateCurrentPointer( func_name )
+
+    if is_extended:
+        counter = 8
+        print(WriteData( 0, 'GLint', packet_length ))
+        print(WriteData( 4, 'GLenum', apiutil.ExtendedOpcodeName( func_name )))
+    else:
+        counter = 0
+
+    # Now emit the WRITE_() macros for all parameters
+    for index in range(0,len(params)):
+        (name, type, vecSize) = params[index]
+        # if we're converting a vector-valued function to a non-vector func:
+        if vecSize > 0 and func_name != orig_func_name:
+            ptrType = apiutil.PointerType(type)
+            for i in range(0, vecSize):
+                print(WriteData( counter + i * apiutil.sizeof(ptrType),
+                                 ptrType, "%s[%d]" % (name, i)))
+            # XXX increment counter here?
+        else:
+            print(WriteData( counter, type, name))
+            if apiutil.IsPointer(type):
+                counter += apiutil.PointerSize()
+            else:
+                counter += apiutil.sizeof(type)
+
+    # finish up
+    if is_extended:
+        print("\tWRITE_OPCODE(pc, CR_EXTEND_OPCODE);")
+    else:
+        print("\tWRITE_OPCODE(pc, %s);" % apiutil.OpcodeName( func_name ))
+
+    if "get" in apiutil.Properties(func_name):
+        print('\tCR_CMDBLOCK_CHECK_FLUSH(pc);')
+
+    print('\tCR_UNLOCK_PACKER_CONTEXT(pc);')
+    print('}\n')
+
+
+r0_funcs = [ 'ChromiumParameteriCR', 'WindowSize', 'WindowShow', 'WindowPosition' ]
+
+
+apiutil.CopyrightC()
+
+print("""
+/* DO NOT EDIT - THIS FILE GENERATED BY THE packer.py SCRIPT */
+
+/* For each of the OpenGL functions we have a packer function which
+ * packs the function's opcode and arguments into a buffer.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+
+""")
+
+
+keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
+
+for func_name in keys:
+    if apiutil.FindSpecial( "packer", func_name ):
+        continue
+
+    if not apiutil.HasPackOpcode(func_name):
+        continue
+
+    pointers_ok = 0
+
+    return_type = apiutil.ReturnType(func_name)
+    params = apiutil.Parameters(func_name)
+
+    if return_type != 'void':
+        # Yet another gross hack for glGetString
+        if return_type.find('*') == -1:
+            return_type = return_type + " *"
+        params.append(("return_value", return_type, 0))
+
+    if "get" in apiutil.Properties(func_name):
+        pointers_ok = 1
+        params.append(("writeback", "int *", 0))
+
+    if func_name == 'Writeback':
+        pointers_ok = 1
+
+    if not func_name in r0_funcs:
+        print('#ifndef IN_RING0')
+        
+    PrintFunc( func_name, params, pointers_ok )
+
+    if not func_name in r0_funcs:
+        print('#endif')
+    
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/packer_bbox.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/packer_bbox.py	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/packer_bbox.py	(revision 86648)
@@ -0,0 +1,293 @@
+# Copyright (c) 2001, Stanford University
+# All rights reserved.
+#
+# See the file LICENSE.txt for information on redistributing this software.
+
+# This script generates the packer_bbox.c file from gl_header.parsed
+
+from __future__ import print_function
+import sys
+import string
+
+import apiutil
+
+
+apiutil.CopyrightC()
+
+print("""
+/* DO NOT EDIT - THIS FILE GENERATED BY THE packer_bbox.py SCRIPT */
+
+/* These functions pack glVertex functions and also update the bounding box
+ * if the cr_packer_globals.updateBBOX variable is non-zero.
+ */
+
+#include "packer.h"
+#include "cr_opcodes.h"
+#include "pack_bbox.h"
+
+#include <float.h>
+
+/**
+ * Reset packer bounding box to empty state.
+ */
+void crPackResetBoundingBox(CRPackContext *pc)
+{
+	pc->bounds_min.x =  FLT_MAX;
+	pc->bounds_min.y =  FLT_MAX;
+	pc->bounds_min.z =  FLT_MAX;
+	pc->bounds_max.x = -FLT_MAX;
+	pc->bounds_max.y = -FLT_MAX;
+	pc->bounds_max.z = -FLT_MAX;
+	pc->updateBBOX = 1;
+}
+
+/**
+ * Query current bounding box.
+ * \return GL_TRUE if non-empty box, GL_FALSE if empty box.
+ */
+GLboolean crPackGetBoundingBox(CRPackContext *pc,
+                               GLfloat *xmin, GLfloat *ymin, GLfloat *zmin,
+                               GLfloat *xmax, GLfloat *ymax, GLfloat *zmax)
+{
+	if (pc->bounds_min.x != FLT_MAX) {
+		*xmin = pc->bounds_min.x;
+		*ymin = pc->bounds_min.y;
+		*zmin = pc->bounds_min.z;
+		*xmax = pc->bounds_max.x;
+		*ymax = pc->bounds_max.y;
+		*zmax = pc->bounds_max.z;
+		return GL_TRUE;
+	}
+	else {
+		return GL_FALSE;
+	}
+}
+
+""")
+
+def WriteData( offset, arg_type, arg_name ):
+	if arg_type.find('*') != -1:
+		retval = "\tWRITE_NETWORK_POINTER(%d, (void *) %s);" % (offset, arg_name )
+	else:	
+		if arg_type == "GLdouble" or arg_type == "GLclampd":
+			retval = "\tWRITE_DOUBLE(%d, %s);" % (offset, arg_name)
+		else:
+			retval = "\tWRITE_DATA(%d, %s, %s);" % (offset, arg_type, arg_name)
+	return retval
+
+
+def PrintFunction( func_name, extSuffix, num_coords, argtype,
+				   do_count, do_vector ):
+	"""
+	Generate all the functions named crPackVertex[234][dfis][v]BBOX() and
+	crPackVertex[234][dfis][v]BBOX_COUNT().
+	We also handle glVertexAttrib*ARB.
+	Note: func_name should not have an ARB suffix.
+	"""
+
+	if do_count:
+		countSuffix = "_COUNT"
+	else:
+		countSuffix = ""
+
+	if func_name[0:12] == "VertexAttrib":
+		isVertexAttrib = 1
+	else:
+		isVertexAttrib = 0
+
+	if argtype[0] == "N":
+		normalized = 1
+	else:
+		normalized = 0;
+
+	if argtype == "b" or argtype == "Nb":
+		vector_type = "GLbyte"
+	elif argtype == "ub" or argtype == "Nub":
+		vector_type = "GLubyte"
+	elif argtype == "s" or argtype == "Ns":
+		vector_type = "GLshort"
+	elif argtype == "us" or argtype == "Nus":
+		vector_type = "GLushort"
+	elif argtype == "i" or argtype == "Ni":
+		vector_type = "GLint"
+	elif argtype == "ui" or argtype == "Nui":
+		vector_type = "GLuint"
+	elif argtype == "f":
+		vector_type = "GLfloat"
+	elif argtype == "d":
+		vector_type = "GLdouble"
+	else:
+		print("type is %s" % argtype)
+		abort()
+
+	if do_vector:
+		if isVertexAttrib:
+			func_name = 'VertexAttrib%d%sv' % (num_coords, argtype)
+		else:
+			func_name = 'Vertex%d%sv' % (num_coords,argtype)
+
+	params = apiutil.Parameters(func_name + extSuffix)
+
+	print('void PACK_APIENTRY crPack%sBBOX%s(%s)' % (func_name + extSuffix, countSuffix,
+			 apiutil.MakeDeclarationString(params)))
+	print('{')
+
+	if do_vector:
+		# vector version
+		packet_length = num_coords * apiutil.sizeof(vector_type)
+		if isVertexAttrib:
+			packet_length += 4  # for index
+		if packet_length % 4 != 0:
+			packet_length += 2
+
+	else:
+		# non-vector
+		packet_length = apiutil.PacketLength( params )
+		if isVertexAttrib:
+			packet_length += 0  # for index
+		if packet_length % 4 != 0:
+			packet_length += 2
+
+
+	print("\tCR_GET_PACKER_CONTEXT(pc);")
+	print("\tunsigned char *data_ptr = NULL;")
+
+	if normalized:
+		if argtype == "Nb":
+			t = "B"
+		elif argtype == "Ni":
+			t = "I"
+		elif argtype == "Nui":
+			t = "UI"
+		elif argtype == "Nub":
+			t = "UB"
+		elif argtype == "Ns":
+			t = "S"
+		elif argtype == "Nus":
+			t = "US"
+		else:
+			abort()
+		if do_vector:
+			print("\tCREATE_%dD_VFLOATS_%s_NORMALIZED();" % (num_coords, t))
+		else:
+			print("\tCREATE_%dD_FLOATS_%s_NORMALIZED();" % (num_coords, t))
+	else:
+		if do_vector:
+			print("\tCREATE_%dD_VFLOATS();" % num_coords)
+		else:
+			print("\tCREATE_%dD_FLOATS();" % num_coords)
+
+	print("\tCR_GET_BUFFERED%s_POINTER(pc, %d);" % (countSuffix, packet_length))
+
+	# Bounding box code
+	if isVertexAttrib:
+		print("\tif (pc->updateBBOX && index == 0)")
+	else:
+		print("\tif (pc->updateBBOX)")
+	print("\t{")
+	if num_coords < 4:
+		print("\t\tUPDATE_%dD_BBOX();" % num_coords)
+	else:
+		print("\t\tUPDATE_3D_BBOX();")
+	print("\t}")
+
+	if isVertexAttrib:
+		print("\tif (index > 0) {")
+		t = argtype
+		print("\t\tpc->current.c.vertexAttrib.%s%d[index] = data_ptr + 4;" % (t, num_coords))
+		print("\t\tpc->current.attribsUsedMask |= (1 << index);")
+		if do_count:
+			print("\t\tpc->current.vtx_count--;")
+
+		print("\t}")
+
+		fname = func_name + extSuffix
+		if do_vector:
+			# use non-vector opcode
+			opcode = apiutil.OpcodeName( func_name[:-1] + extSuffix )
+		else:
+			opcode = apiutil.OpcodeName( func_name + extSuffix )
+	counter = 0
+
+	if do_vector:
+		if isVertexAttrib:
+			print("\tWRITE_DATA(0, GLuint, index);")
+			counter += 4
+			argname = params[1][0]  # skip 'index' parameter
+		else:
+			argname = params[0][0]
+
+		for index in range(num_coords):
+			print(WriteData( counter, vector_type, "%s[%d]" % (argname, index)))
+			counter += apiutil.sizeof(vector_type)
+
+		if isVertexAttrib:
+			if do_vector == 2:
+				# this is a bit of a hack
+				print("\tWRITE_OPCODE(pc, %s);" % apiutil.OpcodeName( func_name + "ARB" ))
+			else:
+				print("\tWRITE_OPCODE(pc, %s);" % apiutil.OpcodeName( func_name[:-1] + "ARB" ))
+		else:
+			print("\tWRITE_OPCODE(pc, %s);" % apiutil.OpcodeName( func_name[:-1] ))
+	else:
+		for index in range(0,len(params)):
+			(name, type, vecSize) = params[index]
+			print(WriteData( counter, type, name))
+			counter += apiutil.sizeof(type)
+
+		if isVertexAttrib:
+			print("\tWRITE_OPCODE(pc, %s);" % apiutil.OpcodeName( func_name + "ARB" ))
+		else:
+			print("\tWRITE_OPCODE(pc, %s);" % apiutil.OpcodeName( func_name ))
+
+	print("\tCR_UNLOCK_PACKER_CONTEXT(pc);")
+
+
+	print('}\n')
+
+#end PrintFunction()
+
+
+for num_coords in [2,3,4]:
+	for argtype in ['d', 'f', 'i', 's']:
+		func_name = 'Vertex%d%s' % (num_coords, argtype)
+		for count in range(0, 2):
+			for vec in range(0, 2):
+				PrintFunction( func_name, "", num_coords, argtype,
+							   count, vec )
+
+for num_coords in [1,2,3,4]:
+	for argtype in ['d', 'f', 's']:
+		func_name = 'VertexAttrib%d%s' % (num_coords, argtype)
+		for count in range(0, 2):
+			for vec in range(0, 2):
+				PrintFunction( func_name, "ARB", num_coords, argtype,
+							   count, vec )
+
+# Special vector functions
+moreFuncs = [ [ "VertexAttrib4ubv", "ub" ],
+			  [ "VertexAttrib4usv", "us" ],
+			  [ "VertexAttrib4uiv", "ui" ],
+			  [ "VertexAttrib4bv", "b" ],
+			  [ "VertexAttrib4iv", "i" ],
+			  [ "VertexAttrib4Nbv", "Nb" ],
+			  [ "VertexAttrib4Nsv", "Ns" ],
+			  [ "VertexAttrib4Niv", "Ni" ],
+			  [ "VertexAttrib4Nubv", "Nub" ],
+			  [ "VertexAttrib4Nusv", "Nus" ],
+			  [ "VertexAttrib4Nuiv", "Nui" ]
+			]
+for (func_name, argtype) in moreFuncs:
+	vec = 2  # special, hacked value
+	num_coords = 4
+	for count in range(0, 2):
+		PrintFunction( func_name, "ARB", num_coords, argtype, count, vec )
+
+# Special non-vector functions
+moreFuncs = [ [ "VertexAttrib4Nub", "Nub" ] ]
+for (func_name, argtype) in moreFuncs:
+	vec = 0
+	num_coords = 4
+	for count in range(0, 2):
+		PrintFunction( func_name, "ARB", num_coords, argtype, count, vec )
+
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/packer_defs.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/packer_defs.py	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/packer_defs.py	(revision 86648)
@@ -0,0 +1,201 @@
+# Copyright (c) 2001, Stanford University
+# All rights reserved.
+#
+# See the file LICENSE.txt for information on redistributing this software.
+
+# This script generates the packer/packer.def file.
+
+import sys
+import cPickle
+
+import apiutil
+
+
+apiutil.CopyrightDef()
+
+print "DESCRIPTION \"\""
+print "EXPORTS"
+
+keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
+for func_name in keys:
+	if apiutil.CanPack(func_name):
+		print "crPack%s" % func_name
+
+functions = [
+	'crPackVertexAttrib1dARBBBOX',
+	'crPackVertexAttrib1dvARBBBOX',
+	'crPackVertexAttrib1fARBBBOX',
+	'crPackVertexAttrib1fvARBBBOX',
+	'crPackVertexAttrib1sARBBBOX',
+	'crPackVertexAttrib1svARBBBOX',
+	'crPackVertexAttrib2dARBBBOX',
+	'crPackVertexAttrib2dvARBBBOX',
+	'crPackVertexAttrib2fARBBBOX',
+	'crPackVertexAttrib2fvARBBBOX',
+	'crPackVertexAttrib2sARBBBOX',
+	'crPackVertexAttrib2svARBBBOX',
+	'crPackVertexAttrib3dARBBBOX',
+	'crPackVertexAttrib3dvARBBBOX',
+	'crPackVertexAttrib3fARBBBOX',
+	'crPackVertexAttrib3fvARBBBOX',
+	'crPackVertexAttrib3sARBBBOX',
+	'crPackVertexAttrib3svARBBBOX',
+	'crPackVertexAttrib4dARBBBOX',
+	'crPackVertexAttrib4dvARBBBOX',
+	'crPackVertexAttrib4fARBBBOX',
+	'crPackVertexAttrib4fvARBBBOX',
+	'crPackVertexAttrib4sARBBBOX',
+	'crPackVertexAttrib4svARBBBOX',
+	'crPackVertexAttrib4usvARBBBOX',
+	'crPackVertexAttrib4ivARBBBOX',
+	'crPackVertexAttrib4uivARBBBOX',
+	'crPackVertexAttrib4bvARBBBOX',
+	'crPackVertexAttrib4ubvARBBBOX',
+	'crPackVertexAttrib4NusvARBBBOX',
+	'crPackVertexAttrib4NsvARBBBOX',
+	'crPackVertexAttrib4NuivARBBBOX',
+	'crPackVertexAttrib4NivARBBBOX',
+	'crPackVertexAttrib4NubvARBBBOX',
+	'crPackVertexAttrib4NbvARBBBOX',
+	'crPackVertexAttrib4NubARBBBOX',
+	'crPackVertex2dBBOX',
+	'crPackVertex2dvBBOX',
+	'crPackVertex2fBBOX',
+	'crPackVertex2fvBBOX',
+	'crPackVertex2iBBOX',
+	'crPackVertex2ivBBOX',
+	'crPackVertex2sBBOX',
+	'crPackVertex2svBBOX',
+	'crPackVertex3dBBOX',
+	'crPackVertex3dvBBOX',
+	'crPackVertex3fBBOX',
+	'crPackVertex3fvBBOX',
+	'crPackVertex3iBBOX',
+	'crPackVertex3ivBBOX',
+	'crPackVertex3sBBOX',
+	'crPackVertex3svBBOX',
+	'crPackVertex4dBBOX',
+	'crPackVertex4dvBBOX',
+	'crPackVertex4fBBOX',
+	'crPackVertex4fvBBOX',
+	'crPackVertex4iBBOX',
+	'crPackVertex4ivBBOX',
+	'crPackVertex4sBBOX',
+	'crPackVertex4svBBOX',
+	'crPackVertexAttrib1dARBBBOX_COUNT',
+	'crPackVertexAttrib1dvARBBBOX_COUNT',
+	'crPackVertexAttrib1fARBBBOX_COUNT',
+	'crPackVertexAttrib1fvARBBBOX_COUNT',
+	'crPackVertexAttrib1sARBBBOX_COUNT',
+	'crPackVertexAttrib1svARBBBOX_COUNT',
+	'crPackVertexAttrib2dARBBBOX_COUNT',
+	'crPackVertexAttrib2dvARBBBOX_COUNT',
+	'crPackVertexAttrib2fARBBBOX_COUNT',
+	'crPackVertexAttrib2fvARBBBOX_COUNT',
+	'crPackVertexAttrib2sARBBBOX_COUNT',
+	'crPackVertexAttrib2svARBBBOX_COUNT',
+	'crPackVertexAttrib3dARBBBOX_COUNT',
+	'crPackVertexAttrib3dvARBBBOX_COUNT',
+	'crPackVertexAttrib3fARBBBOX_COUNT',
+	'crPackVertexAttrib3fvARBBBOX_COUNT',
+	'crPackVertexAttrib3sARBBBOX_COUNT',
+	'crPackVertexAttrib3svARBBBOX_COUNT',
+	'crPackVertexAttrib4dARBBBOX_COUNT',
+	'crPackVertexAttrib4dvARBBBOX_COUNT',
+	'crPackVertexAttrib4fARBBBOX_COUNT',
+	'crPackVertexAttrib4fvARBBBOX_COUNT',
+	'crPackVertexAttrib4sARBBBOX_COUNT',
+	'crPackVertexAttrib4svARBBBOX_COUNT',
+	'crPackVertexAttrib4usvARBBBOX_COUNT',
+	'crPackVertexAttrib4ivARBBBOX_COUNT',
+	'crPackVertexAttrib4uivARBBBOX_COUNT',
+	'crPackVertexAttrib4bvARBBBOX_COUNT',
+	'crPackVertexAttrib4ubvARBBBOX_COUNT',
+	'crPackVertexAttrib4NusvARBBBOX_COUNT',
+	'crPackVertexAttrib4NsvARBBBOX_COUNT',
+	'crPackVertexAttrib4NuivARBBBOX_COUNT',
+	'crPackVertexAttrib4NivARBBBOX_COUNT',
+	'crPackVertexAttrib4NubvARBBBOX_COUNT',
+	'crPackVertexAttrib4NbvARBBBOX_COUNT',
+	'crPackVertexAttrib4NubARBBBOX_COUNT',
+	'crPackVertex2dBBOX_COUNT',
+	'crPackVertex2dvBBOX_COUNT',
+	'crPackVertex2fBBOX_COUNT',
+	'crPackVertex2fvBBOX_COUNT',
+	'crPackVertex2iBBOX_COUNT',
+	'crPackVertex2ivBBOX_COUNT',
+	'crPackVertex2sBBOX_COUNT',
+	'crPackVertex2svBBOX_COUNT',
+	'crPackVertex3dBBOX_COUNT',
+	'crPackVertex3dvBBOX_COUNT',
+	'crPackVertex3fBBOX_COUNT',
+	'crPackVertex3fvBBOX_COUNT',
+	'crPackVertex3iBBOX_COUNT',
+	'crPackVertex3ivBBOX_COUNT',
+	'crPackVertex3sBBOX_COUNT',
+	'crPackVertex3svBBOX_COUNT',
+	'crPackVertex4dBBOX_COUNT',
+	'crPackVertex4dvBBOX_COUNT',
+	'crPackVertex4fBBOX_COUNT',
+	'crPackVertex4fvBBOX_COUNT',
+	'crPackVertex4iBBOX_COUNT',
+	'crPackVertex4ivBBOX_COUNT',
+	'crPackVertex4sBBOX_COUNT',
+	'crPackVertex4svBBOX_COUNT',
+	'crPackVertexAttribs1dvNV',
+	'crPackVertexAttribs1fvNV',
+	'crPackVertexAttribs1svNV',
+	'crPackVertexAttribs2dvNV',
+	'crPackVertexAttribs2fvNV',
+	'crPackVertexAttribs2svNV',
+	'crPackVertexAttribs3dvNV',
+	'crPackVertexAttribs3fvNV',
+	'crPackVertexAttribs3svNV',
+	'crPackVertexAttribs4dvNV',
+	'crPackVertexAttribs4fvNV',
+	'crPackVertexAttribs4svNV',
+	'crPackVertexAttribs4ubvNV',
+	'crPackExpandDrawArrays',
+	'crPackExpandDrawElements',
+	'crPackUnrollDrawElements',
+	'crPackExpandDrawRangeElements',
+	'crPackExpandArrayElement',
+	'crPackExpandMultiDrawArraysEXT',
+	'crPackMultiDrawArraysEXT',
+	'crPackMultiDrawElementsEXT',
+	'crPackExpandMultiDrawElementsEXT',
+	'crPackMapBufferARB',
+	'crPackUnmapBufferARB' ]
+
+for func_name in functions:
+    print "%s" % func_name
+
+
+print """
+crPackInitBuffer
+crPackResetPointers
+crPackAppendBuffer
+crPackAppendBoundedBuffer
+crPackSetBuffer
+crPackSetBufferDEBUG
+crPackReleaseBuffer
+crPackFlushFunc
+crPackFlushArg
+crPackSendHugeFunc
+crPackBoundsInfoCR
+crPackResetBoundingBox
+crPackGetBoundingBox
+crPackOffsetCurrentPointers
+crPackNullCurrentPointers
+crPackNewContext
+crPackGetContext
+crPackSetContext
+crPackFree
+crNetworkPointerWrite
+crPackCanHoldBuffer
+crPackCanHoldBoundedBuffer
+crPackMaxData
+crPackErrorFunction
+cr_packer_globals
+_PackerTSD
+"""
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/packer_extensions.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/packer_extensions.h	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/packer_extensions.h	(revision 86648)
@@ -0,0 +1,13 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_PACKER_EXTENSIONS_H
+#define CR_PACKER_EXTENSIONS_H
+
+int __packTexParameterNumParams( GLenum pname );
+int __packFogParamsLength( GLenum pname );
+
+#endif /* CR_PACKER_EXTENSION_H */
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/packer_special
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/packer_special	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/packer_special	(revision 86648)
@@ -0,0 +1,185 @@
+# Copyright (c) 2001, Stanford University
+# All rights reserved.
+#
+# See the file LICENSE.txt for information on redistributing this software.
+BoundsInfoCR
+VertexPointer
+ColorPointer
+CreateContext
+SecondaryColorPointerEXT
+NormalPointer
+TexCoordPointer
+EdgeFlagPointer
+InterleavedArrays
+IndexPointer
+AreTexturesResident
+AreProgramsResidentNV
+Bitmap
+CallLists
+NewList
+EndList
+ClipPlane
+DeleteTextures
+DrawPixels
+Fogfv
+Fogiv
+GetTexImage
+Lightfv
+Lightiv
+LightModelfv
+LightModeliv
+LoadMatrixf
+LoadMatrixd
+Map1d
+Map1f
+Map2d
+Map2f
+Materialfv
+Materialiv
+MultMatrixd
+MultMatrixf
+PixelMapfv
+PixelMapuiv
+PixelMapusv
+PolygonStipple
+PrioritizeTextures
+ReadPixels
+TexEnvfv
+TexEnviv
+TexGendv
+TexGenfv
+TexGeniv
+TexEnvf
+TexEnvi
+TexGend
+TexGenf
+TexGeni
+TexImage1D
+TexImage2D
+TexImage3D
+TexImage3DEXT
+TexParameterfv
+TexParameteriv
+TexParameterf
+TexParameteri
+TexSubImage1D
+TexSubImage2D
+TexSubImage3D
+DrawElements
+MultiDrawArraysEXT
+MultiDrawElementsEXT
+DrawRangeElements
+CombinerParameterfvNV
+CombinerParameterivNV
+CombinerStageParameterfvNV
+ChromiumParametervCR
+WindowCreate
+FeedbackBuffer
+SelectBuffer
+Begin
+End
+VertexArrayRangeNV
+LoadTransposeMatrixfARB
+LoadTransposeMatrixdARB
+MultTransposeMatrixfARB
+MultTransposeMatrixdARB
+ProgramParameters4dvNV
+ProgramParameters4fvNV
+VertexAttribPointerNV
+VertexAttribs1dvNV
+VertexAttribs1fvNV
+VertexAttribs1svNV
+VertexAttribs2dvNV
+VertexAttribs2fvNV
+VertexAttribs2svNV
+VertexAttribs3dvNV
+VertexAttribs3fvNV
+VertexAttribs3svNV
+VertexAttribs4dvNV
+VertexAttribs4fvNV
+VertexAttribs4svNV
+VertexAttribs4ubvNV
+ExecuteProgramNV
+LoadProgramNV
+RequestResidentProgramsNV
+CompressedTexImage3DARB
+CompressedTexImage2DARB
+CompressedTexImage1DARB
+CompressedTexSubImage3DARB
+CompressedTexSubImage2DARB
+CompressedTexSubImage1DARB
+GetCompressedTexImageARB
+DeleteFencesNV
+FogCoordPointerEXT
+PointParameterfvARB
+PointParameteriv
+ProgramNamedParameter4fNV
+ProgramNamedParameter4dNV
+ProgramNamedParameter4fvNV
+ProgramNamedParameter4dvNV
+GetProgramNamedParameterdvNV
+GetProgramNamedParameterfvNV
+VertexAttrib4bvARB
+VertexAttrib4ivARB
+VertexAttrib4ubvARB
+VertexAttrib4uivARB
+VertexAttrib4usvARB
+VertexAttribPointerARB
+DeleteProgramsARB
+ProgramStringARB
+VertexAttrib4NbvARB
+VertexAttrib4NivARB
+VertexAttrib4NsvARB
+VertexAttrib4NubvARB
+VertexAttrib4NuivARB
+VertexAttrib4NusvARB
+BufferDataARB
+BufferSubDataARB
+MapBufferARB
+UnmapBufferARB
+DeleteBuffersARB
+ZPixCR
+WindowVisibleRegion
+BindAttribLocation
+ShaderSource
+Uniform1fv
+Uniform1iv
+Uniform2fv
+Uniform2iv
+Uniform3fv
+Uniform3iv
+Uniform4fv
+Uniform4iv
+UniformMatrix2fv
+UniformMatrix3fv
+UniformMatrix4fv
+DrawBuffers
+GetActiveAttrib
+GetActiveUniform
+GetAttachedShaders
+GetShaderInfoLog
+GetProgramInfoLog
+GetShaderSource
+GetAttribLocation
+GetUniformLocation
+GetAttachedObjectsARB
+GetInfoLogARB
+GetBufferSubDataARB
+DeleteQueriesARB
+DeleteFramebuffersEXT
+DeleteRenderbuffersEXT
+LockArraysEXT
+GetUniformsLocations
+GetAttribsLocations
+UniformMatrix2x3fv
+UniformMatrix3x2fv
+UniformMatrix2x4fv
+UniformMatrix4x2fv
+UniformMatrix3x4fv
+UniformMatrix4x3fv
+VBoxTexPresent
+WindowPosition
+WindowShow
+WindowSize
+BeginQueryARB
+EndQueryARB
Index: /trunk/src/VBox/GuestHost/OpenGL/util/vreg.cpp
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/util/vreg.cpp	(revision 86648)
+++ /trunk/src/VBox/GuestHost/OpenGL/util/vreg.cpp	(revision 86648)
@@ -0,0 +1,1702 @@
+/* $Id$ */
+/** @file
+ * Visible Regions processing API implementation
+ */
+
+/*
+ * Copyright (C) 2012-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#ifdef IN_VMSVGA3D
+# include "../include/cr_vreg.h"
+# define WARN AssertMsgFailed
+#else
+# include <cr_vreg.h>
+# include <cr_error.h>
+#endif
+
+#include <iprt/errcore.h>
+#include <iprt/assert.h>
+#include <iprt/asm.h>
+
+#ifdef DEBUG_misha
+# define VBOXVDBG_VR_LAL_DISABLE
+#endif
+
+#ifndef IN_RING0
+# include <iprt/memcache.h>
+#  ifndef VBOXVDBG_VR_LAL_DISABLE
+static RTMEMCACHE g_VBoxVrLookasideList;
+#   define vboxVrRegLaAlloc(_c) RTMemCacheAlloc((_c))
+#   define vboxVrRegLaFree(_c, _e) RTMemCacheFree((_c), (_e))
+
+DECLINLINE(int) vboxVrLaCreate(PRTMEMCACHE phCache, size_t cbElement)
+{
+    int rc = RTMemCacheCreate(phCache,
+                              cbElement,
+                              0 /* cbAlignment */,
+                              UINT32_MAX /* cMaxObjects */,
+                              NULL /* pfnCtor*/,
+                              NULL /* pfnDtor*/,
+                              NULL /* pvUser*/,
+                              0 /* fFlags*/);
+    if (!RT_SUCCESS(rc))
+    {
+        WARN(("RTMemCacheCreate failed rc %d", rc));
+        return rc;
+    }
+    return VINF_SUCCESS;
+}
+#  define vboxVrLaDestroy(_c) RTMemCacheDestroy((_c))
+# endif /* !VBOXVDBG_VR_LAL_DISABLE */
+
+#else /* IN_RING0 */
+# ifdef RT_OS_WINDOWS
+#  undef PAGE_SIZE
+#  undef PAGE_SHIFT
+#  include <iprt/nt/ntddk.h>
+#  ifndef VBOXVDBG_VR_LAL_DISABLE
+static LOOKASIDE_LIST_EX g_VBoxVrLookasideList;
+#   define vboxVrRegLaAlloc(_c) ExAllocateFromLookasideListEx(&(_c))
+#   define vboxVrRegLaFree(_c, _e) ExFreeToLookasideListEx(&(_c), (_e))
+#   define VBOXWDDMVR_MEMTAG 'vDBV'
+DECLINLINE(int) vboxVrLaCreate(LOOKASIDE_LIST_EX *pCache, size_t cbElement)
+{
+    NTSTATUS Status = ExInitializeLookasideListEx(pCache,
+                                                  NULL, /* PALLOCATE_FUNCTION_EX Allocate */
+                                                  NULL, /* PFREE_FUNCTION_EX Free */
+                                                  NonPagedPool,
+                                                  0, /* ULONG Flags */
+                                                  cbElement,
+                                                  VBOXWDDMVR_MEMTAG,
+                                                  0 /* USHORT Depth - reserved, must be null */
+                                                  );
+    if (!NT_SUCCESS(Status))
+    {
+        WARN(("ExInitializeLookasideListEx failed, Status (0x%x)", Status));
+        return VERR_GENERAL_FAILURE;
+    }
+
+    return VINF_SUCCESS;
+}
+#   define vboxVrLaDestroy(_c) ExDeleteLookasideListEx(&(_c))
+#  endif
+# else  /* !RT_OS_WINDOWS */
+#  error "port me!"
+# endif /* !RT_OS_WINDOWS */
+#endif /* IN_RING0 */
+
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+#define VBOXVR_INVALID_COORD    (~0U)
+
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+static volatile int32_t g_cVBoxVrInits = 0;
+
+
+static PVBOXVR_REG vboxVrRegCreate(void)
+{
+#ifndef VBOXVDBG_VR_LAL_DISABLE
+    PVBOXVR_REG pReg = (PVBOXVR_REG)vboxVrRegLaAlloc(g_VBoxVrLookasideList);
+    if (!pReg)
+    {
+        WARN(("ExAllocateFromLookasideListEx failed!"));
+    }
+    return pReg;
+#else
+    return (PVBOXVR_REG)RTMemAlloc(sizeof(VBOXVR_REG));
+#endif
+}
+
+static void vboxVrRegTerm(PVBOXVR_REG pReg)
+{
+#ifndef VBOXVDBG_VR_LAL_DISABLE
+    vboxVrRegLaFree(g_VBoxVrLookasideList, pReg);
+#else
+    RTMemFree(pReg);
+#endif
+}
+
+VBOXVREGDECL(void) VBoxVrListClear(PVBOXVR_LIST pList)
+{
+    PVBOXVR_REG pReg, pRegNext;
+    RTListForEachSafe(&pList->ListHead, pReg, pRegNext, VBOXVR_REG, ListEntry)
+    {
+        vboxVrRegTerm(pReg);
+    }
+    VBoxVrListInit(pList);
+}
+
+/* moves list data to pDstList and empties the pList */
+VBOXVREGDECL(void) VBoxVrListMoveTo(PVBOXVR_LIST pList, PVBOXVR_LIST pDstList)
+{
+    *pDstList = *pList;
+    pDstList->ListHead.pNext->pPrev = &pDstList->ListHead;
+    pDstList->ListHead.pPrev->pNext = &pDstList->ListHead;
+    VBoxVrListInit(pList);
+}
+
+VBOXVREGDECL(int) VBoxVrInit(void)
+{
+    int32_t cNewRefs = ASMAtomicIncS32(&g_cVBoxVrInits);
+    Assert(cNewRefs >= 1);
+    Assert(cNewRefs == 1); /* <- debugging */
+    if (cNewRefs > 1)
+        return VINF_SUCCESS;
+
+#ifndef VBOXVDBG_VR_LAL_DISABLE
+    int rc = vboxVrLaCreate(&g_VBoxVrLookasideList, sizeof(VBOXVR_REG));
+    if (!RT_SUCCESS(rc))
+    {
+        WARN(("ExInitializeLookasideListEx failed, rc (%d)", rc));
+        return rc;
+    }
+#endif
+
+    return VINF_SUCCESS;
+}
+
+VBOXVREGDECL(void) VBoxVrTerm(void)
+{
+    int32_t cNewRefs = ASMAtomicDecS32(&g_cVBoxVrInits);
+    Assert(cNewRefs >= 0);
+    if (cNewRefs > 0)
+        return;
+
+#ifndef VBOXVDBG_VR_LAL_DISABLE
+    vboxVrLaDestroy(g_VBoxVrLookasideList);
+#endif
+}
+
+typedef DECLCALLBACK(int) FNVBOXVR_CB_COMPARATOR(PCVBOXVR_REG pReg1, PCVBOXVR_REG pReg2);
+typedef FNVBOXVR_CB_COMPARATOR *PFNVBOXVR_CB_COMPARATOR;
+
+static DECLCALLBACK(int) vboxVrRegNonintersectedComparator(PCRTRECT pRect1, PCRTRECT pRect2)
+{
+    Assert(!VBoxRectIsIntersect(pRect1, pRect2));
+    if (pRect1->yTop != pRect2->yTop)
+        return pRect1->yTop - pRect2->yTop;
+    return pRect1->xLeft - pRect2->xLeft;
+}
+
+#ifdef DEBUG_misha
+static void vboxVrDbgListDoVerify(PVBOXVR_LIST pList)
+{
+    PVBOXVR_REG pReg1, pReg2;
+    RTListForEach(&pList->ListHead, pReg1, VBOXVR_REG, ListEntry)
+    {
+        Assert(!VBoxRectIsZero(&pReg1->Rect));
+        for (RTLISTNODE *pEntry2 = pReg1->ListEntry.pNext; pEntry2 != &pList->ListHead; pEntry2 = pEntry2->pNext)
+        {
+            pReg2 = PVBOXVR_REG_FROM_ENTRY(pEntry2);
+            Assert(vboxVrRegNonintersectedComparator(&pReg1->Rect, &pReg2->Rect) < 0);
+        }
+    }
+}
+# define vboxVrDbgListVerify(_p) vboxVrDbgListDoVerify(_p)
+#else
+# define vboxVrDbgListVerify(_p) do {} while (0)
+#endif
+
+
+DECLINLINE(void) vboxVrListRegAdd(PVBOXVR_LIST pList, PVBOXVR_REG pReg, PRTLISTNODE pPlace, bool fAfter)
+{
+    if (fAfter)
+        RTListPrepend(pPlace, &pReg->ListEntry);
+    else
+        RTListAppend(pPlace, &pReg->ListEntry);
+    ++pList->cEntries;
+    vboxVrDbgListVerify(pList);
+}
+
+DECLINLINE(void) vboxVrListRegRemove(PVBOXVR_LIST pList, PVBOXVR_REG pReg)
+{
+    RTListNodeRemove(&pReg->ListEntry);
+    --pList->cEntries;
+    vboxVrDbgListVerify(pList);
+}
+
+static void vboxVrListRegAddOrder(PVBOXVR_LIST pList, PRTLISTNODE pMemberEntry, PVBOXVR_REG pReg)
+{
+    for (;;)
+    {
+        if (pMemberEntry != &pList->ListHead)
+        {
+            PVBOXVR_REG pMemberReg = PVBOXVR_REG_FROM_ENTRY(pMemberEntry);
+            if (vboxVrRegNonintersectedComparator(&pMemberReg->Rect, &pReg->Rect) < 0)
+            {
+                pMemberEntry = pMemberEntry->pNext;
+                continue;
+            }
+        }
+        vboxVrListRegAdd(pList, pReg, pMemberEntry, false);
+        break;
+    }
+}
+
+static void vboxVrListAddNonintersected(PVBOXVR_LIST pList1, PVBOXVR_LIST pList2)
+{
+    PRTLISTNODE pEntry1 = pList1->ListHead.pNext;
+
+    for (PRTLISTNODE pEntry2 = pList2->ListHead.pNext; pEntry2 != &pList2->ListHead; pEntry2 = pList2->ListHead.pNext)
+    {
+        PVBOXVR_REG pReg2 = PVBOXVR_REG_FROM_ENTRY(pEntry2);
+        for (;;)
+        {
+            if (pEntry1 != &pList1->ListHead)
+            {
+                PVBOXVR_REG pReg1 = PVBOXVR_REG_FROM_ENTRY(pEntry1);
+                if (vboxVrRegNonintersectedComparator(&pReg1->Rect, &pReg2->Rect) < 0)
+                {
+                    pEntry1 = pEntry1->pNext;
+                    continue;
+                }
+            }
+            vboxVrListRegRemove(pList2, pReg2);
+            vboxVrListRegAdd(pList1, pReg2, pEntry1, false);
+            break;
+        }
+    }
+
+    Assert(VBoxVrListIsEmpty(pList2));
+}
+
+static int vboxVrListRegIntersectSubstNoJoin(PVBOXVR_LIST pList1, PVBOXVR_REG pReg1, PCRTRECT  pRect2)
+{
+    uint32_t topLim = VBOXVR_INVALID_COORD;
+    uint32_t bottomLim = VBOXVR_INVALID_COORD;
+    RTLISTNODE List;
+    PVBOXVR_REG pBottomReg = NULL;
+#ifdef DEBUG_misha
+    RTRECT tmpRect = pReg1->Rect;
+    vboxVrDbgListVerify(pList1);
+#endif
+    Assert(!VBoxRectIsZero(pRect2));
+
+    RTListInit(&List);
+
+    Assert(VBoxRectIsIntersect(&pReg1->Rect, pRect2));
+
+    if (pReg1->Rect.yTop < pRect2->yTop)
+    {
+        Assert(pRect2->yTop < pReg1->Rect.yBottom);
+        PVBOXVR_REG pRegResult = vboxVrRegCreate();
+        pRegResult->Rect.yTop = pReg1->Rect.yTop;
+        pRegResult->Rect.xLeft = pReg1->Rect.xLeft;
+        pRegResult->Rect.yBottom = pRect2->yTop;
+        pRegResult->Rect.xRight = pReg1->Rect.xRight;
+        topLim = pRect2->yTop;
+        RTListAppend(&List, &pRegResult->ListEntry);
+    }
+
+    if (pReg1->Rect.yBottom > pRect2->yBottom)
+    {
+        Assert(pRect2->yBottom > pReg1->Rect.yTop);
+        PVBOXVR_REG pRegResult = vboxVrRegCreate();
+        pRegResult->Rect.yTop = pRect2->yBottom;
+        pRegResult->Rect.xLeft = pReg1->Rect.xLeft;
+        pRegResult->Rect.yBottom = pReg1->Rect.yBottom;
+        pRegResult->Rect.xRight = pReg1->Rect.xRight;
+        bottomLim = pRect2->yBottom;
+        pBottomReg = pRegResult;
+    }
+
+    if (pReg1->Rect.xLeft < pRect2->xLeft)
+    {
+        Assert(pRect2->xLeft < pReg1->Rect.xRight);
+        PVBOXVR_REG pRegResult = vboxVrRegCreate();
+        pRegResult->Rect.yTop = topLim == VBOXVR_INVALID_COORD ? pReg1->Rect.yTop : topLim;
+        pRegResult->Rect.xLeft = pReg1->Rect.xLeft;
+        pRegResult->Rect.yBottom = bottomLim == VBOXVR_INVALID_COORD ? pReg1->Rect.yBottom : bottomLim;
+        pRegResult->Rect.xRight = pRect2->xLeft;
+        RTListAppend(&List, &pRegResult->ListEntry);
+    }
+
+    if (pReg1->Rect.xRight > pRect2->xRight)
+    {
+        Assert(pRect2->xRight > pReg1->Rect.xLeft);
+        PVBOXVR_REG pRegResult = vboxVrRegCreate();
+        pRegResult->Rect.yTop = topLim == VBOXVR_INVALID_COORD ? pReg1->Rect.yTop : topLim;
+        pRegResult->Rect.xLeft = pRect2->xRight;
+        pRegResult->Rect.yBottom = bottomLim == VBOXVR_INVALID_COORD ? pReg1->Rect.yBottom : bottomLim;
+        pRegResult->Rect.xRight = pReg1->Rect.xRight;
+        RTListAppend(&List, &pRegResult->ListEntry);
+    }
+
+    if (pBottomReg)
+        RTListAppend(&List, &pBottomReg->ListEntry);
+
+    PRTLISTNODE pMemberEntry = pReg1->ListEntry.pNext;
+    vboxVrListRegRemove(pList1, pReg1);
+    vboxVrRegTerm(pReg1);
+
+    if (RTListIsEmpty(&List))
+        return VINF_SUCCESS; /* the region is covered by the pRect2 */
+
+    PRTLISTNODE pNext;
+    PRTLISTNODE pEntry = List.pNext;
+    for (; pEntry != &List; pEntry = pNext)
+    {
+        pNext = pEntry->pNext;
+        PVBOXVR_REG pReg = PVBOXVR_REG_FROM_ENTRY(pEntry);
+
+        vboxVrListRegAddOrder(pList1, pMemberEntry, pReg);
+        pMemberEntry = pEntry->pNext; /* the following elements should go after the given pEntry since they are ordered already */
+    }
+    return VINF_SUCCESS;
+}
+
+/**
+ * @returns Entry to be used for continuing the rectangles iterations being made currently on the callback call.
+ *          ListHead is returned to break the current iteration
+ * @param   ppNext      specifies next reg entry to be used for iteration. the default is pReg1->ListEntry.pNext */
+typedef DECLCALLBACK(PRTLISTNODE) FNVBOXVR_CB_INTERSECTED_VISITOR(PVBOXVR_LIST pList1, PVBOXVR_REG pReg1,
+                                                                  PCRTRECT pRect2, void *pvContext, PRTLISTNODE *ppNext);
+typedef FNVBOXVR_CB_INTERSECTED_VISITOR *PFNVBOXVR_CB_INTERSECTED_VISITOR;
+
+static void vboxVrListVisitIntersected(PVBOXVR_LIST pList1, uint32_t cRects, PCRTRECT aRects,
+                                       PFNVBOXVR_CB_INTERSECTED_VISITOR pfnVisitor, void* pvVisitor)
+{
+    PRTLISTNODE pEntry1 = pList1->ListHead.pNext;
+    PRTLISTNODE pNext1;
+    uint32_t iFirst2 = 0;
+
+    for (; pEntry1 != &pList1->ListHead; pEntry1 = pNext1)
+    {
+        pNext1 = pEntry1->pNext;
+        PVBOXVR_REG pReg1 = PVBOXVR_REG_FROM_ENTRY(pEntry1);
+        for (uint32_t i = iFirst2; i < cRects; ++i)
+        {
+            PCRTRECT pRect2 = &aRects[i];
+            if (VBoxRectIsZero(pRect2))
+                continue;
+
+            if (!VBoxRectIsIntersect(&pReg1->Rect, pRect2))
+                continue;
+
+            /* the visitor can modify the list 1, apply necessary adjustments after it */
+            pEntry1 = pfnVisitor (pList1, pReg1, pRect2, pvVisitor, &pNext1);
+            if (pEntry1 == &pList1->ListHead)
+                break;
+            pReg1 = PVBOXVR_REG_FROM_ENTRY(pEntry1);
+        }
+    }
+}
+
+#if 0 /* unused */
+/**
+ * @returns Entry to be iterated next. ListHead is returned to break the
+ *          iteration
+ */
+typedef DECLCALLBACK(PRTLISTNODE) FNVBOXVR_CB_NONINTERSECTED_VISITOR(PVBOXVR_LIST pList1, PVBOXVR_REG pReg1, void *pvContext);
+typedef FNVBOXVR_CB_NONINTERSECTED_VISITOR *PFNVBOXVR_CB_NONINTERSECTED_VISITOR;
+
+static void vboxVrListVisitNonintersected(PVBOXVR_LIST pList1, uint32_t cRects, PCRTRECT aRects,
+                                          PFNVBOXVR_CB_NONINTERSECTED_VISITOR pfnVisitor, void* pvVisitor)
+{
+    PRTLISTNODE pEntry1 = pList1->ListHead.pNext;
+    PRTLISTNODE pNext1;
+    uint32_t iFirst2 = 0;
+
+    for (; pEntry1 != &pList1->ListHead; pEntry1 = pNext1)
+    {
+        PVBOXVR_REG pReg1 = PVBOXVR_REG_FROM_ENTRY(pEntry1);
+        uint32_t i = iFirst2;
+        for (; i < cRects; ++i)
+        {
+            PCRTRECT pRect2 = &aRects[i];
+            if (VBoxRectIsZero(pRect2))
+                continue;
+
+            if (VBoxRectIsIntersect(&pReg1->Rect, pRect2))
+                break;
+        }
+
+        if (i == cRects)
+            pNext1 = pfnVisitor(pList1, pReg1, pvVisitor);
+        else
+            pNext1 = pEntry1->pNext;
+    }
+}
+#endif /* unused */
+
+static void vboxVrListJoinRectsHV(PVBOXVR_LIST pList, bool fHorizontal)
+{
+    PRTLISTNODE pNext1, pNext2;
+
+    for (PRTLISTNODE pEntry1 = pList->ListHead.pNext; pEntry1 != &pList->ListHead; pEntry1 = pNext1)
+    {
+        PVBOXVR_REG pReg1 = PVBOXVR_REG_FROM_ENTRY(pEntry1);
+        pNext1 = pEntry1->pNext;
+        for (PRTLISTNODE pEntry2 = pEntry1->pNext; pEntry2 != &pList->ListHead; pEntry2 = pNext2)
+        {
+            PVBOXVR_REG pReg2 = PVBOXVR_REG_FROM_ENTRY(pEntry2);
+            pNext2 = pEntry2->pNext;
+            if (fHorizontal)
+            {
+                if (pReg1->Rect.yTop == pReg2->Rect.yTop)
+                {
+                    if (pReg1->Rect.xRight == pReg2->Rect.xLeft)
+                    {
+                        /* join rectangles */
+                        vboxVrListRegRemove(pList, pReg2);
+                        if (pReg1->Rect.yBottom > pReg2->Rect.yBottom)
+                        {
+                            int32_t oldRight1 = pReg1->Rect.xRight;
+                            int32_t oldBottom1 = pReg1->Rect.yBottom;
+                            pReg1->Rect.xRight = pReg2->Rect.xRight;
+                            pReg1->Rect.yBottom = pReg2->Rect.yBottom;
+
+                            vboxVrDbgListVerify(pList);
+
+                            pReg2->Rect.xLeft = pReg1->Rect.xLeft;
+                            pReg2->Rect.yTop = pReg1->Rect.yBottom;
+                            pReg2->Rect.xRight = oldRight1;
+                            pReg2->Rect.yBottom = oldBottom1;
+                            vboxVrListRegAddOrder(pList, pReg1->ListEntry.pNext, pReg2);
+                            /* restart the pNext1 & pNext2 since regs are splitted into smaller ones in y dimension
+                             * and thus can match one of the previous rects */
+                            pNext1 = pList->ListHead.pNext;
+                            break;
+                        }
+
+                        if (pReg1->Rect.yBottom < pReg2->Rect.yBottom)
+                        {
+                            pReg1->Rect.xRight = pReg2->Rect.xRight;
+                            vboxVrDbgListVerify(pList);
+                            pReg2->Rect.yTop = pReg1->Rect.yBottom;
+                            vboxVrListRegAddOrder(pList, pReg1->ListEntry.pNext, pReg2);
+                            /* restart the pNext1 & pNext2 since regs are splitted into smaller ones in y dimension
+                             * and thus can match one of the previous rects */
+                            pNext1 = pList->ListHead.pNext;
+                            break;
+                        }
+
+                        pReg1->Rect.xRight = pReg2->Rect.xRight;
+                        vboxVrDbgListVerify(pList);
+                        /* reset the pNext1 since it could be the pReg2 being destroyed */
+                        pNext1 = pEntry1->pNext;
+                        /* pNext2 stays the same since it is pReg2->ListEntry.pNext, which is kept intact */
+                        vboxVrRegTerm(pReg2);
+                    }
+                    continue;
+                }
+                else if (pReg1->Rect.yBottom == pReg2->Rect.yBottom)
+                {
+                    Assert(pReg1->Rect.yTop < pReg2->Rect.yTop); /* <- since pReg1 > pReg2 && pReg1->Rect.yTop != pReg2->Rect.yTop*/
+                    if (pReg1->Rect.xRight == pReg2->Rect.xLeft)
+                    {
+                        /* join rectangles */
+                        vboxVrListRegRemove(pList, pReg2);
+
+                        pReg1->Rect.yBottom = pReg2->Rect.yTop;
+                        vboxVrDbgListVerify(pList);
+                        pReg2->Rect.xLeft = pReg1->Rect.xLeft;
+
+                        vboxVrListRegAddOrder(pList, pNext2, pReg2);
+
+                        /* restart the pNext1 & pNext2 since regs are splitted into smaller ones in y dimension
+                         * and thus can match one of the previous rects */
+                        pNext1 = pList->ListHead.pNext;
+                        break;
+                    }
+
+                    if (pReg1->Rect.xLeft == pReg2->Rect.xRight)
+                    {
+                        /* join rectangles */
+                        vboxVrListRegRemove(pList, pReg2);
+
+                        pReg1->Rect.yBottom = pReg2->Rect.yTop;
+                        vboxVrDbgListVerify(pList);
+                        pReg2->Rect.xRight = pReg1->Rect.xRight;
+
+                        vboxVrListRegAddOrder(pList, pNext2, pReg2);
+
+                        /* restart the pNext1 & pNext2 since regs are splitted into smaller ones in y dimension
+                         * and thus can match one of the previous rects */
+                        pNext1 = pList->ListHead.pNext;
+                        break;
+                    }
+                    continue;
+                }
+            }
+            else
+            {
+                if (pReg1->Rect.yBottom == pReg2->Rect.yTop)
+                {
+                    if (pReg1->Rect.xLeft == pReg2->Rect.xLeft)
+                    {
+                        if (pReg1->Rect.xRight == pReg2->Rect.xRight)
+                        {
+                            /* join rects */
+                            vboxVrListRegRemove(pList, pReg2);
+
+                            pReg1->Rect.yBottom = pReg2->Rect.yBottom;
+                            vboxVrDbgListVerify(pList);
+
+                            /* reset the pNext1 since it could be the pReg2 being destroyed */
+                            pNext1 = pEntry1->pNext;
+                            /* pNext2 stays the same since it is pReg2->ListEntry.pNext, which is kept intact */
+                            vboxVrRegTerm(pReg2);
+                            continue;
+                        }
+                        /* no more to be done for for pReg1 */
+                        break;
+                    }
+
+                    if (pReg1->Rect.xRight > pReg2->Rect.xLeft)
+                    {
+                        /* no more to be done for for pReg1 */
+                        break;
+                    }
+
+                    continue;
+                }
+
+                if (pReg1->Rect.yBottom < pReg2->Rect.yTop)
+                {
+                    /* no more to be done for for pReg1 */
+                    break;
+                }
+            }
+        }
+    }
+}
+
+static void vboxVrListJoinRects(PVBOXVR_LIST pList)
+{
+    vboxVrListJoinRectsHV(pList, true);
+    vboxVrListJoinRectsHV(pList, false);
+}
+
+typedef struct VBOXVR_CBDATA_SUBST
+{
+    int rc;
+    bool fChanged;
+} VBOXVR_CBDATA_SUBST;
+typedef VBOXVR_CBDATA_SUBST *PVBOXVR_CBDATA_SUBST;
+
+static DECLCALLBACK(PRTLISTNODE) vboxVrListSubstNoJoinCb(PVBOXVR_LIST pList, PVBOXVR_REG pReg1, PCRTRECT pRect2,
+                                                         void *pvContext, PRTLISTNODE *ppNext)
+{
+    PVBOXVR_CBDATA_SUBST pData = (PVBOXVR_CBDATA_SUBST)pvContext;
+    /* store the prev to get the new pNext out of it*/
+    PRTLISTNODE pPrev = pReg1->ListEntry.pPrev;
+    pData->fChanged = true;
+
+    Assert(VBoxRectIsIntersect(&pReg1->Rect, pRect2));
+
+    /* NOTE: the pReg1 will be invalid after the vboxVrListRegIntersectSubstNoJoin call!!! */
+    int rc = vboxVrListRegIntersectSubstNoJoin(pList, pReg1, pRect2);
+    if (RT_SUCCESS(rc))
+    {
+        *ppNext = pPrev->pNext;
+        return &pList->ListHead;
+    }
+    WARN(("vboxVrListRegIntersectSubstNoJoin failed!"));
+    Assert(!RT_SUCCESS(rc));
+    pData->rc = rc;
+    *ppNext = &pList->ListHead;
+    return &pList->ListHead;
+}
+
+static int vboxVrListSubstNoJoin(PVBOXVR_LIST pList, uint32_t cRects, PCRTRECT aRects, bool *pfChanged)
+{
+    if (pfChanged)
+        *pfChanged = false;
+
+    if (VBoxVrListIsEmpty(pList))
+        return VINF_SUCCESS;
+
+    VBOXVR_CBDATA_SUBST Data;
+    Data.rc = VINF_SUCCESS;
+    Data.fChanged = false;
+
+    vboxVrListVisitIntersected(pList, cRects, aRects, vboxVrListSubstNoJoinCb, &Data);
+    if (!RT_SUCCESS(Data.rc))
+    {
+        WARN(("vboxVrListVisitIntersected failed!"));
+        return Data.rc;
+    }
+
+    if (pfChanged)
+        *pfChanged = Data.fChanged;
+
+    return VINF_SUCCESS;
+}
+
+#if 0
+static PCRTRECT vboxVrRectsOrder(uint32_t cRects, PCRTRECT  aRects)
+{
+#ifdef VBOX_STRICT
+    for (uint32_t i = 0; i < cRects; ++i)
+    {
+        PRTRECT pRectI = &aRects[i];
+        for (uint32_t j = i + 1; j < cRects; ++j)
+        {
+            PRTRECT pRectJ = &aRects[j];
+            Assert(!VBoxRectIsIntersect(pRectI, pRectJ));
+        }
+    }
+#endif
+
+    PRTRECT pRects = (PRTRECT)aRects;
+    /* check if rects are ordered already */
+    for (uint32_t i = 0; i < cRects - 1; ++i)
+    {
+        PRTRECT pRect1 = &pRects[i];
+        PRTRECT pRect2 = &pRects[i+1];
+        if (vboxVrRegNonintersectedComparator(pRect1, pRect2) < 0)
+            continue;
+
+        WARN(("rects are unoreded!"));
+
+        if (pRects == aRects)
+        {
+            pRects = (PRTRECT)RTMemAlloc(sizeof(RTRECT) * cRects);
+            if (!pRects)
+            {
+                WARN(("RTMemAlloc failed!"));
+                return NULL;
+            }
+
+            memcpy(pRects, aRects, sizeof(RTRECT) * cRects);
+        }
+
+        Assert(pRects != aRects);
+
+        int j = (int)i - 1;
+        for (;;)
+        {
+            RTRECT Tmp = *pRect1;
+            *pRect1 = *pRect2;
+            *pRect2 = Tmp;
+
+            if (j < 0)
+                break;
+
+            if (vboxVrRegNonintersectedComparator(pRect1, pRect1-1) > 0)
+                break;
+
+            pRect2 = pRect1--;
+            --j;
+        }
+    }
+
+    return pRects;
+}
+#endif
+
+VBOXVREGDECL(void) VBoxVrListTranslate(PVBOXVR_LIST pList, int32_t x, int32_t y)
+{
+    for (PRTLISTNODE pEntry1 = pList->ListHead.pNext; pEntry1 != &pList->ListHead; pEntry1 = pEntry1->pNext)
+    {
+        PVBOXVR_REG pReg1 = PVBOXVR_REG_FROM_ENTRY(pEntry1);
+        VBoxRectTranslate(&pReg1->Rect, x, y);
+    }
+}
+
+#if 0 /* unused */
+
+static DECLCALLBACK(PRTLISTNODE) vboxVrListIntersectNoJoinNonintersectedCb(PVBOXVR_LIST pList1, PVBOXVR_REG pReg1, void *pvContext)
+{
+    VBOXVR_CBDATA_SUBST *pData = (VBOXVR_CBDATA_SUBST*)pvContext;
+
+    PRTLISTNODE pNext = pReg1->ListEntry.pNext;
+
+    vboxVrDbgListVerify(pList1);
+
+    vboxVrListRegRemove(pList1, pReg1);
+    vboxVrRegTerm(pReg1);
+
+    vboxVrDbgListVerify(pList1);
+
+    pData->fChanged = true;
+
+    return pNext;
+}
+
+static DECLCALLBACK(PRTLISTNODE) vboxVrListIntersectNoJoinIntersectedCb(PVBOXVR_LIST pList1, PVBOXVR_REG pReg1, PCRTRECT pRect2,
+                                                                        void *pvContext, PPRTLISTNODE ppNext)
+{
+    RT_NOREF1(ppNext);
+    PVBOXVR_CBDATA_SUBST pData = (PVBOXVR_CBDATA_SUBST)pvContext;
+    pData->fChanged = true;
+
+    vboxVrDbgListVerify(pList1);
+
+    PRTLISTNODE pMemberEntry = pReg1->ListEntry.pNext;
+
+    Assert(VBoxRectIsIntersect(&pReg1->Rect, pRect2));
+    Assert(!VBoxRectIsZero(pRect2));
+
+    vboxVrListRegRemove(pList1, pReg1);
+    VBoxRectIntersect(&pReg1->Rect, pRect2);
+    Assert(!VBoxRectIsZero(&pReg1->Rect));
+
+    vboxVrListRegAddOrder(pList1, pMemberEntry, pReg1);
+
+    vboxVrDbgListVerify(pList1);
+
+    return &pReg1->ListEntry;
+}
+
+#endif /* unused */
+
+static int vboxVrListIntersectNoJoin(PVBOXVR_LIST pList, PCVBOXVR_LIST pList2, bool *pfChanged)
+{
+    bool fChanged = false;
+    if (pfChanged)
+        *pfChanged = false;
+
+    if (VBoxVrListIsEmpty(pList))
+        return VINF_SUCCESS;
+
+    if (VBoxVrListIsEmpty(pList2))
+    {
+        if (pfChanged)
+            *pfChanged = true;
+
+        VBoxVrListClear(pList);
+        return VINF_SUCCESS;
+    }
+
+    PRTLISTNODE pNext1;
+
+    for (PRTLISTNODE pEntry1 = pList->ListHead.pNext; pEntry1 != &pList->ListHead; pEntry1 = pNext1)
+    {
+        pNext1 = pEntry1->pNext;
+        PVBOXVR_REG pReg1 = PVBOXVR_REG_FROM_ENTRY(pEntry1);
+        RTRECT RegRect1 = pReg1->Rect;
+        PRTLISTNODE pMemberEntry = pReg1->ListEntry.pNext;
+
+        for (const RTLISTNODE *pEntry2 = pList2->ListHead.pNext; pEntry2 != &pList2->ListHead; pEntry2 = pEntry2->pNext)
+        {
+            PCVBOXVR_REG pReg2 = PVBOXVR_REG_FROM_ENTRY(pEntry2);
+            PCRTRECT pRect2 = &pReg2->Rect;
+
+            if (!VBoxRectIsIntersect(&RegRect1, pRect2))
+                continue;
+
+            if (pReg1)
+            {
+                if (VBoxRectCovers(pRect2, &RegRect1))
+                {
+                    /* no change */
+
+                    /* zero up the pReg1 to mark it as intersected (see the code after this inner loop) */
+                    pReg1 = NULL;
+
+                    if (!VBoxRectCmp(pRect2, &RegRect1))
+                        break; /* and we can break the iteration here */
+                }
+                else
+                {
+                    /*just to ensure the VBoxRectCovers is true for equal rects */
+                    Assert(VBoxRectCmp(pRect2, &RegRect1));
+
+                    /** @todo this can have false-alarming sometimes if the separated rects will then be joind into the original rect,
+                     * so far this should not be a problem for VReg clients, so keep it this way for now  */
+                    fChanged = true;
+
+                    /* re-use the reg entry */
+                    vboxVrListRegRemove(pList, pReg1);
+                    VBoxRectIntersect(&pReg1->Rect, pRect2);
+                    Assert(!VBoxRectIsZero(&pReg1->Rect));
+
+                    vboxVrListRegAddOrder(pList, pMemberEntry, pReg1);
+                    pReg1 = NULL;
+                }
+            }
+            else
+            {
+                Assert(fChanged); /* <- should be set by the if branch above */
+                PVBOXVR_REG pReg = vboxVrRegCreate();
+                if (!pReg)
+                {
+                    WARN(("vboxVrRegCreate failed!"));
+                    return VERR_NO_MEMORY;
+                }
+                VBoxRectIntersected(&RegRect1, pRect2, &pReg->Rect);
+                Assert(!VBoxRectIsZero(&pReg->Rect));
+                vboxVrListRegAddOrder(pList, pList->ListHead.pNext, pReg);
+            }
+        }
+
+        if (pReg1)
+        {
+            /* the region has no intersections, remove it */
+            vboxVrListRegRemove(pList, pReg1);
+            vboxVrRegTerm(pReg1);
+            fChanged = true;
+        }
+    }
+
+    *pfChanged = fChanged;
+    return VINF_SUCCESS;
+}
+
+VBOXVREGDECL(int) VBoxVrListIntersect(PVBOXVR_LIST pList, PCVBOXVR_LIST pList2, bool *pfChanged)
+{
+    bool fChanged = false;
+
+    int rc = vboxVrListIntersectNoJoin(pList, pList2, &fChanged);
+    if (pfChanged)
+        *pfChanged = fChanged;
+
+    if (!RT_SUCCESS(rc))
+    {
+        WARN(("vboxVrListSubstNoJoin failed!"));
+        return rc;
+    }
+
+    if (fChanged)
+    {
+        vboxVrListJoinRects(pList);
+    }
+
+    return rc;
+}
+
+VBOXVREGDECL(int) VBoxVrListRectsIntersect(PVBOXVR_LIST pList, uint32_t cRects, PCRTRECT aRects, bool *pfChanged)
+{
+    if (pfChanged)
+        *pfChanged = false;
+
+    if (VBoxVrListIsEmpty(pList))
+        return VINF_SUCCESS;
+
+    if (!cRects)
+    {
+        if (pfChanged)
+            *pfChanged = true;
+
+        VBoxVrListClear(pList);
+        return VINF_SUCCESS;
+    }
+
+    /* we perform intersection using lists because the algorythm axpects the rects to be non-intersected,
+     * which list guaranties to us */
+
+    VBOXVR_LIST TmpList;
+    VBoxVrListInit(&TmpList);
+
+    int rc = VBoxVrListRectsAdd(&TmpList, cRects, aRects, NULL);
+    if (RT_SUCCESS(rc))
+    {
+        rc = VBoxVrListIntersect(pList, &TmpList, pfChanged);
+        if (!RT_SUCCESS(rc))
+        {
+            WARN(("VBoxVrListIntersect failed! rc %d", rc));
+        }
+    }
+    else
+    {
+        WARN(("VBoxVrListRectsAdd failed, rc %d", rc));
+    }
+    VBoxVrListClear(&TmpList);
+
+    return rc;
+}
+
+VBOXVREGDECL(int) VBoxVrListRectsSubst(PVBOXVR_LIST pList, uint32_t cRects, PCRTRECT aRects, bool *pfChanged)
+{
+#if 0
+    PCRTRECT  pRects = vboxVrRectsOrder(cRects, aRects);
+    if (!pRects)
+    {
+        WARN(("vboxVrRectsOrder failed!"));
+        return VERR_NO_MEMORY;
+    }
+#endif
+
+    bool fChanged = false;
+
+    int rc = vboxVrListSubstNoJoin(pList, cRects, aRects, &fChanged);
+    if (!RT_SUCCESS(rc))
+    {
+        WARN(("vboxVrListSubstNoJoin failed!"));
+        goto done;
+    }
+
+    if (fChanged)
+        goto done;
+
+    vboxVrListJoinRects(pList);
+
+done:
+#if 0
+    if (pRects != aRects)
+        RTMemFree(pRects);
+#endif
+
+    if (pfChanged)
+        *pfChanged = fChanged;
+
+    return rc;
+}
+
+VBOXVREGDECL(int) VBoxVrListRectsSet(PVBOXVR_LIST pList, uint32_t cRects, PCRTRECT aRects, bool *pfChanged)
+{
+    if (pfChanged)
+        *pfChanged = false;
+
+    if (!cRects && VBoxVrListIsEmpty(pList))
+        return VINF_SUCCESS;
+
+    /** @todo fChanged will have false alarming here, fix if needed */
+    VBoxVrListClear(pList);
+
+    int rc = VBoxVrListRectsAdd(pList, cRects, aRects, NULL);
+    if (!RT_SUCCESS(rc))
+    {
+        WARN(("VBoxVrListRectsSet failed rc %d", rc));
+        return rc;
+    }
+
+    if (pfChanged)
+        *pfChanged = true;
+
+    return VINF_SUCCESS;
+}
+
+VBOXVREGDECL(int) VBoxVrListRectsAdd(PVBOXVR_LIST pList, uint32_t cRects, PCRTRECT aRects, bool *pfChanged)
+{
+    uint32_t cCovered = 0;
+
+    if (pfChanged)
+        *pfChanged = false;
+
+#if 0
+#ifdef VBOX_STRICT
+        for (uint32_t i = 0; i < cRects; ++i)
+        {
+            PRTRECT pRectI = &aRects[i];
+            for (uint32_t j = i + 1; j < cRects; ++j)
+            {
+                PRTRECT pRectJ = &aRects[j];
+                Assert(!VBoxRectIsIntersect(pRectI, pRectJ));
+            }
+        }
+#endif
+#endif
+
+    /* early sort out the case when there are no new rects */
+    for (uint32_t i = 0; i < cRects; ++i)
+    {
+        if (VBoxRectIsZero(&aRects[i]))
+        {
+            cCovered++;
+            continue;
+        }
+
+        for (PRTLISTNODE pEntry1 = pList->ListHead.pNext; pEntry1 != &pList->ListHead; pEntry1 = pEntry1->pNext)
+        {
+            PVBOXVR_REG pReg1 = PVBOXVR_REG_FROM_ENTRY(pEntry1);
+
+            if (VBoxRectCovers(&pReg1->Rect, &aRects[i]))
+            {
+                cCovered++;
+                break;
+            }
+        }
+    }
+
+    if (cCovered == cRects)
+        return VINF_SUCCESS;
+
+    /* rects are not covered, need to go the slow way */
+
+    VBOXVR_LIST DiffList;
+    VBoxVrListInit(&DiffList);
+    PRTRECT pListRects = NULL;
+    uint32_t cAllocatedRects = 0;
+    bool fNeedRectreate = true;
+    bool fChanged = false;
+    int rc = VINF_SUCCESS;
+
+    for (uint32_t i = 0; i < cRects; ++i)
+    {
+        if (VBoxRectIsZero(&aRects[i]))
+            continue;
+
+        PVBOXVR_REG pReg = vboxVrRegCreate();
+        if (!pReg)
+        {
+            WARN(("vboxVrRegCreate failed!"));
+            rc = VERR_NO_MEMORY;
+            break;
+        }
+        pReg->Rect = aRects[i];
+
+        uint32_t cListRects = VBoxVrListRectsCount(pList);
+        if (!cListRects)
+        {
+            vboxVrListRegAdd(pList, pReg, &pList->ListHead, false);
+            fChanged = true;
+            continue;
+        }
+        Assert(VBoxVrListIsEmpty(&DiffList));
+        vboxVrListRegAdd(&DiffList, pReg, &DiffList.ListHead, false);
+
+        if (cAllocatedRects < cListRects)
+        {
+            cAllocatedRects = cListRects + cRects;
+            Assert(fNeedRectreate);
+            if (pListRects)
+                RTMemFree(pListRects);
+            pListRects = (RTRECT *)RTMemAlloc(sizeof(RTRECT) * cAllocatedRects);
+            if (!pListRects)
+            {
+                WARN(("RTMemAlloc failed!"));
+                rc = VERR_NO_MEMORY;
+                break;
+            }
+        }
+
+
+        if (fNeedRectreate)
+        {
+            rc = VBoxVrListRectsGet(pList, cListRects, pListRects);
+            Assert(rc == VINF_SUCCESS);
+            fNeedRectreate = false;
+        }
+
+        bool fDummyChanged = false;
+        rc = vboxVrListSubstNoJoin(&DiffList, cListRects, pListRects, &fDummyChanged);
+        if (!RT_SUCCESS(rc))
+        {
+            WARN(("vboxVrListSubstNoJoin failed!"));
+            rc = VERR_NO_MEMORY;
+            break;
+        }
+
+        if (!VBoxVrListIsEmpty(&DiffList))
+        {
+            vboxVrListAddNonintersected(pList, &DiffList);
+            fNeedRectreate = true;
+            fChanged = true;
+        }
+
+        Assert(VBoxVrListIsEmpty(&DiffList));
+    }
+
+    if (pListRects)
+        RTMemFree(pListRects);
+
+    Assert(VBoxVrListIsEmpty(&DiffList) || rc != VINF_SUCCESS);
+    VBoxVrListClear(&DiffList);
+
+    if (fChanged)
+        vboxVrListJoinRects(pList);
+
+    if (pfChanged)
+        *pfChanged = fChanged;
+
+    return VINF_SUCCESS;
+}
+
+VBOXVREGDECL(int) VBoxVrListRectsGet(PVBOXVR_LIST pList, uint32_t cRects, RTRECT * aRects)
+{
+    if (cRects < VBoxVrListRectsCount(pList))
+        return VERR_BUFFER_OVERFLOW;
+
+    uint32_t i = 0;
+    for (PRTLISTNODE pEntry1 = pList->ListHead.pNext; pEntry1 != &pList->ListHead; pEntry1 = pEntry1->pNext, ++i)
+    {
+        PVBOXVR_REG pReg1 = PVBOXVR_REG_FROM_ENTRY(pEntry1);
+        aRects[i] = pReg1->Rect;
+    }
+    return VINF_SUCCESS;
+}
+
+VBOXVREGDECL(int) VBoxVrListCmp(const VBOXVR_LIST *pList1, const VBOXVR_LIST *pList2)
+{
+    int cTmp = pList1->cEntries - pList2->cEntries;
+    if (cTmp)
+        return cTmp;
+
+    PVBOXVR_REG pReg1, pReg2;
+
+    for (pReg1 = RTListNodeGetNext(&pList1->ListHead, VBOXVR_REG, ListEntry),
+         pReg2 = RTListNodeGetNext(&pList2->ListHead, VBOXVR_REG, ListEntry);
+
+         !RTListNodeIsDummy(&pList1->ListHead, pReg1, VBOXVR_REG, ListEntry);
+
+         pReg1 = RT_FROM_MEMBER(pReg1->ListEntry.pNext, VBOXVR_REG, ListEntry),
+         pReg2 = RT_FROM_MEMBER(pReg2->ListEntry.pNext, VBOXVR_REG, ListEntry) )
+    {
+        Assert(!RTListNodeIsDummy(&pList2->ListHead, pReg2, VBOXVR_REG, ListEntry));
+        cTmp = VBoxRectCmp(&pReg1->Rect, &pReg2->Rect);
+        if (cTmp)
+            return cTmp;
+    }
+    Assert(RTListNodeIsDummy(&pList2->ListHead, pReg2, VBOXVR_REG, ListEntry));
+    return 0;
+}
+
+VBOXVREGDECL(int) VBoxVrListClone(PCVBOXVR_LIST pList, PVBOXVR_LIST pDstList)
+{
+    VBoxVrListInit(pDstList);
+    PCVBOXVR_REG pReg;
+    RTListForEach(&pList->ListHead, pReg, const VBOXVR_REG, ListEntry)
+    {
+        PVBOXVR_REG pDstReg = vboxVrRegCreate();
+        if (!pDstReg)
+        {
+            WARN(("vboxVrRegLaAlloc failed"));
+            VBoxVrListClear(pDstList);
+            return VERR_NO_MEMORY;
+        }
+        pDstReg->Rect = pReg->Rect;
+        vboxVrListRegAdd(pDstList, pDstReg, &pDstList->ListHead, true /*bool fAfter*/);
+    }
+
+    Assert(pDstList->cEntries == pList->cEntries);
+
+    return VINF_SUCCESS;
+}
+
+VBOXVREGDECL(void) VBoxVrCompositorInit(PVBOXVR_COMPOSITOR pCompositor, PFNVBOXVRCOMPOSITOR_ENTRY_RELEASED pfnEntryReleased)
+{
+    RTListInit(&pCompositor->List);
+    pCompositor->pfnEntryReleased = pfnEntryReleased;
+}
+
+VBOXVREGDECL(void) VBoxVrCompositorRegionsClear(PVBOXVR_COMPOSITOR pCompositor, bool *pfChanged)
+{
+    bool fChanged = false;
+    PVBOXVR_COMPOSITOR_ENTRY pEntry, pEntryNext;
+    RTListForEachSafe(&pCompositor->List, pEntry, pEntryNext, VBOXVR_COMPOSITOR_ENTRY, Node)
+    {
+        VBoxVrCompositorEntryRemove(pCompositor, pEntry);
+        fChanged = true;
+    }
+
+    if (pfChanged)
+        *pfChanged = fChanged;
+}
+
+VBOXVREGDECL(void) VBoxVrCompositorClear(PVBOXVR_COMPOSITOR pCompositor)
+{
+    VBoxVrCompositorRegionsClear(pCompositor, NULL);
+}
+
+DECLINLINE(void) vboxVrCompositorEntryRelease(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                              PVBOXVR_COMPOSITOR_ENTRY pReplacingEntry)
+{
+    if (--pEntry->cRefs)
+    {
+        Assert(pEntry->cRefs < UINT32_MAX/2);
+        return;
+    }
+
+    Assert(!VBoxVrCompositorEntryIsInList(pEntry));
+
+    if (pCompositor->pfnEntryReleased)
+        pCompositor->pfnEntryReleased(pCompositor, pEntry, pReplacingEntry);
+}
+
+DECLINLINE(void) vboxVrCompositorEntryAddRef(PVBOXVR_COMPOSITOR_ENTRY pEntry)
+{
+    ++pEntry->cRefs;
+}
+
+DECLINLINE(void) vboxVrCompositorEntryAdd(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry)
+{
+    RTListPrepend(&pCompositor->List, &pEntry->Node);
+    vboxVrCompositorEntryAddRef(pEntry);
+}
+
+DECLINLINE(void) vboxVrCompositorEntryRemove(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                             PVBOXVR_COMPOSITOR_ENTRY pReplacingEntry)
+{
+    RTListNodeRemove(&pEntry->Node);
+    vboxVrCompositorEntryRelease(pCompositor, pEntry, pReplacingEntry);
+}
+
+static void vboxVrCompositorEntryReplace(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                         PVBOXVR_COMPOSITOR_ENTRY pReplacingEntry)
+{
+    VBoxVrListMoveTo(&pEntry->Vr, &pReplacingEntry->Vr);
+
+    pReplacingEntry->Node = pEntry->Node;
+    pReplacingEntry->Node.pNext->pPrev = &pReplacingEntry->Node;
+    pReplacingEntry->Node.pPrev->pNext = &pReplacingEntry->Node;
+    pEntry->Node.pNext = NULL;
+    pEntry->Node.pPrev = NULL;
+
+    vboxVrCompositorEntryAddRef(pReplacingEntry);
+    vboxVrCompositorEntryRelease(pCompositor, pEntry, pReplacingEntry);
+}
+
+
+
+VBOXVREGDECL(void) VBoxVrCompositorEntryInit(PVBOXVR_COMPOSITOR_ENTRY pEntry)
+{
+    VBoxVrListInit(&pEntry->Vr);
+    pEntry->cRefs = 0;
+}
+
+VBOXVREGDECL(bool) VBoxVrCompositorEntryRemove(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry)
+{
+    if (!VBoxVrCompositorEntryIsInList(pEntry))
+        return false;
+
+    vboxVrCompositorEntryAddRef(pEntry);
+
+    VBoxVrListClear(&pEntry->Vr);
+    vboxVrCompositorEntryRemove(pCompositor, pEntry, NULL);
+    vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+    return true;
+}
+
+VBOXVREGDECL(bool) VBoxVrCompositorEntryReplace(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                PVBOXVR_COMPOSITOR_ENTRY pNewEntry)
+{
+    if (!VBoxVrCompositorEntryIsInList(pEntry))
+        return false;
+
+    vboxVrCompositorEntryReplace(pCompositor, pEntry, pNewEntry);
+
+    return true;
+}
+
+static int vboxVrCompositorEntryRegionsSubst(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                             uint32_t cRects, PCRTRECT paRects, bool *pfChanged)
+{
+    bool fChanged;
+    vboxVrCompositorEntryAddRef(pEntry);
+
+    int rc = VBoxVrListRectsSubst(&pEntry->Vr, cRects, paRects, &fChanged);
+    if (RT_SUCCESS(rc))
+    {
+        if (VBoxVrListIsEmpty(&pEntry->Vr))
+        {
+            Assert(fChanged);
+            vboxVrCompositorEntryRemove(pCompositor, pEntry, NULL);
+        }
+        if (pfChanged)
+            *pfChanged = false;
+    }
+    else
+        WARN(("VBoxVrListRectsSubst failed, rc %d", rc));
+
+    vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+    return rc;
+}
+
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsAdd(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                  uint32_t cRects, PCRTRECT paRects, PVBOXVR_COMPOSITOR_ENTRY *ppReplacedEntry,
+                                                  uint32_t *pfChangeFlags)
+{
+    bool fOthersChanged = false;
+    bool fCurChanged = false;
+    bool fEntryChanged = false;
+    bool fEntryWasInList = false;
+    PVBOXVR_COMPOSITOR_ENTRY pCur;
+    PVBOXVR_COMPOSITOR_ENTRY pNext;
+    PVBOXVR_COMPOSITOR_ENTRY pReplacedEntry = NULL;
+    int rc = VINF_SUCCESS;
+
+    if (pEntry)
+        vboxVrCompositorEntryAddRef(pEntry);
+
+    if (!cRects)
+    {
+        if (pfChangeFlags)
+            *pfChangeFlags = 0;
+        if (pEntry)
+            vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+        return VINF_SUCCESS;
+    }
+
+    if (pEntry)
+    {
+        fEntryWasInList = VBoxVrCompositorEntryIsInList(pEntry);
+        rc = VBoxVrListRectsAdd(&pEntry->Vr, cRects, paRects, &fEntryChanged);
+        if (RT_SUCCESS(rc))
+        {
+            if (VBoxVrListIsEmpty(&pEntry->Vr))
+            {
+//                WARN(("Empty rectangles passed in, is it expected?"));
+                if (pfChangeFlags)
+                    *pfChangeFlags = 0;
+                vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+                return VINF_SUCCESS;
+            }
+        }
+        else
+        {
+            WARN(("VBoxVrListRectsAdd failed, rc %d", rc));
+            vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+            return rc;
+        }
+
+        Assert(!VBoxVrListIsEmpty(&pEntry->Vr));
+    }
+    else
+    {
+        fEntryChanged = true;
+    }
+
+    RTListForEachSafe(&pCompositor->List, pCur, pNext, VBOXVR_COMPOSITOR_ENTRY, Node)
+    {
+        Assert(!VBoxVrListIsEmpty(&pCur->Vr));
+        if (pCur != pEntry)
+        {
+            if (pEntry && !VBoxVrListCmp(&pCur->Vr, &pEntry->Vr))
+            {
+                VBoxVrListClear(&pCur->Vr);
+                pReplacedEntry = pCur;
+                vboxVrCompositorEntryAddRef(pReplacedEntry);
+                vboxVrCompositorEntryRemove(pCompositor, pCur, pEntry);
+                if (ppReplacedEntry)
+                    *ppReplacedEntry = pReplacedEntry;
+                break;
+            }
+
+            rc = vboxVrCompositorEntryRegionsSubst(pCompositor, pCur, cRects, paRects, &fCurChanged);
+            if (RT_SUCCESS(rc))
+                fOthersChanged |= fCurChanged;
+            else
+            {
+                WARN(("vboxVrCompositorEntryRegionsSubst failed, rc %d", rc));
+                return rc;
+            }
+        }
+    }
+
+    AssertRC(rc);
+
+    if (pEntry)
+    {
+        if (!fEntryWasInList)
+        {
+            Assert(!VBoxVrListIsEmpty(&pEntry->Vr));
+            vboxVrCompositorEntryAdd(pCompositor, pEntry);
+        }
+        vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+    }
+
+    uint32_t fFlags = 0;
+    if (fOthersChanged)
+    {
+        Assert(!pReplacedEntry);
+        fFlags = VBOXVR_COMPOSITOR_CF_ENTRY_REGIONS_CHANGED | VBOXVR_COMPOSITOR_CF_REGIONS_CHANGED
+               | VBOXVR_COMPOSITOR_CF_OTHER_ENTRIES_REGIONS_CHANGED;
+    }
+    else if (pReplacedEntry)
+    {
+        vboxVrCompositorEntryRelease(pCompositor, pReplacedEntry, pEntry);
+        Assert(fEntryChanged);
+        fFlags = VBOXVR_COMPOSITOR_CF_ENTRY_REGIONS_CHANGED | VBOXVR_COMPOSITOR_CF_ENTRY_REPLACED;
+    }
+    else if (fEntryChanged)
+    {
+        Assert(!pReplacedEntry);
+        fFlags = VBOXVR_COMPOSITOR_CF_ENTRY_REGIONS_CHANGED | VBOXVR_COMPOSITOR_CF_REGIONS_CHANGED;
+    }
+    else
+    {
+        Assert(!pReplacedEntry);
+    }
+
+    if (!fEntryWasInList)
+        Assert(fEntryChanged);
+
+    if (pfChangeFlags)
+        *pfChangeFlags = fFlags;
+
+    return VINF_SUCCESS;
+}
+
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsSubst(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                    uint32_t cRects, PCRTRECT paRects, bool *pfChanged)
+{
+    if (!pEntry)
+    {
+        WARN(("VBoxVrCompositorEntryRegionsSubst called with zero entry, unsupported!"));
+        if (pfChanged)
+            *pfChanged = false;
+        return VERR_INVALID_PARAMETER;
+    }
+
+    vboxVrCompositorEntryAddRef(pEntry);
+
+    if (VBoxVrListIsEmpty(&pEntry->Vr))
+    {
+        if (pfChanged)
+            *pfChanged = false;
+        vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+        return VINF_SUCCESS;
+    }
+
+    int rc = vboxVrCompositorEntryRegionsSubst(pCompositor, pEntry, cRects, paRects, pfChanged);
+    if (!RT_SUCCESS(rc))
+        WARN(("pfChanged failed, rc %d", rc));
+
+    vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+
+    return rc;
+}
+
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsSet(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                  uint32_t cRects, PCRTRECT paRects, bool *pfChanged)
+{
+    if (!pEntry)
+    {
+        WARN(("VBoxVrCompositorEntryRegionsSet called with zero entry, unsupported!"));
+        if (pfChanged)
+            *pfChanged = false;
+        return VERR_INVALID_PARAMETER;
+    }
+
+    vboxVrCompositorEntryAddRef(pEntry);
+
+    bool fChanged = false, fCurChanged = false;
+    uint32_t fChangeFlags = 0;
+    int rc;
+    fCurChanged = VBoxVrCompositorEntryRemove(pCompositor, pEntry);
+    fChanged |= fCurChanged;
+
+    rc = VBoxVrCompositorEntryRegionsAdd(pCompositor, pEntry, cRects, paRects, NULL, &fChangeFlags);
+    if (RT_SUCCESS(rc))
+    {
+        fChanged |= !!fChangeFlags;
+        if (pfChanged)
+            *pfChanged = fChanged;
+    }
+    else
+        WARN(("VBoxVrCompositorEntryRegionsAdd failed, rc %d", rc));
+
+    vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+
+    return VINF_SUCCESS;
+}
+
+VBOXVREGDECL(int) VBoxVrCompositorEntryListIntersect(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                     PCVBOXVR_LIST pList2, bool *pfChanged)
+{
+    int rc = VINF_SUCCESS;
+    bool fChanged = false;
+
+    vboxVrCompositorEntryAddRef(pEntry);
+
+    if (VBoxVrCompositorEntryIsInList(pEntry))
+    {
+        rc = VBoxVrListIntersect(&pEntry->Vr, pList2, &fChanged);
+        if (RT_SUCCESS(rc))
+        {
+            if (VBoxVrListIsEmpty(&pEntry->Vr))
+            {
+                Assert(fChanged);
+                vboxVrCompositorEntryRemove(pCompositor, pEntry, NULL);
+            }
+        }
+        else
+        {
+            WARN(("VBoxVrListRectsIntersect failed, rc %d", rc));
+        }
+    }
+
+    if (pfChanged)
+        *pfChanged = fChanged;
+
+    vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+
+    return rc;
+}
+
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsIntersect(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                        uint32_t cRects, PCRTRECT paRects, bool *pfChanged)
+{
+    int rc = VINF_SUCCESS;
+    bool fChanged = false;
+
+    vboxVrCompositorEntryAddRef(pEntry);
+
+    if (VBoxVrCompositorEntryIsInList(pEntry))
+    {
+        rc = VBoxVrListRectsIntersect(&pEntry->Vr, cRects, paRects, &fChanged);
+        if (RT_SUCCESS(rc))
+        {
+            if (VBoxVrListIsEmpty(&pEntry->Vr))
+            {
+                Assert(fChanged);
+                vboxVrCompositorEntryRemove(pCompositor, pEntry, NULL);
+            }
+        }
+        else
+        {
+            WARN(("VBoxVrListRectsIntersect failed, rc %d", rc));
+        }
+    }
+
+    if (pfChanged)
+        *pfChanged = fChanged;
+
+    vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+
+    return rc;
+}
+
+VBOXVREGDECL(int) VBoxVrCompositorEntryListIntersectAll(PVBOXVR_COMPOSITOR pCompositor, PCVBOXVR_LIST pList2, bool *pfChanged)
+{
+    VBOXVR_COMPOSITOR_ITERATOR Iter;
+    VBoxVrCompositorIterInit(pCompositor, &Iter);
+    PVBOXVR_COMPOSITOR_ENTRY pEntry;
+    int rc = VINF_SUCCESS;
+    bool fChanged = false;
+
+    while ((pEntry = VBoxVrCompositorIterNext(&Iter)) != NULL)
+    {
+        bool fTmpChanged = false;
+        int tmpRc = VBoxVrCompositorEntryListIntersect(pCompositor, pEntry, pList2, &fTmpChanged);
+        if (RT_SUCCESS(tmpRc))
+            fChanged |= fTmpChanged;
+        else
+        {
+            WARN(("VBoxVrCompositorEntryRegionsIntersect failed, rc %d", tmpRc));
+            rc = tmpRc;
+        }
+    }
+
+    if (pfChanged)
+        *pfChanged = fChanged;
+
+    return rc;
+}
+
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsIntersectAll(PVBOXVR_COMPOSITOR pCompositor, uint32_t cRegions, PCRTRECT paRegions,
+                                                           bool *pfChanged)
+{
+    VBOXVR_COMPOSITOR_ITERATOR Iter;
+    VBoxVrCompositorIterInit(pCompositor, &Iter);
+    PVBOXVR_COMPOSITOR_ENTRY pEntry;
+    int rc = VINF_SUCCESS;
+    bool fChanged = false;
+
+    while ((pEntry = VBoxVrCompositorIterNext(&Iter)) != NULL)
+    {
+        bool fTmpChanged = false;
+        int tmpRc = VBoxVrCompositorEntryRegionsIntersect(pCompositor, pEntry, cRegions, paRegions, &fTmpChanged);
+        if (RT_SUCCESS(tmpRc))
+            fChanged |= fTmpChanged;
+        else
+        {
+            WARN(("VBoxVrCompositorEntryRegionsIntersect failed, rc %d", tmpRc));
+            rc = tmpRc;
+        }
+    }
+
+    if (pfChanged)
+        *pfChanged = fChanged;
+
+    return rc;
+}
+
+VBOXVREGDECL(int) VBoxVrCompositorEntryRegionsTranslate(PVBOXVR_COMPOSITOR pCompositor, PVBOXVR_COMPOSITOR_ENTRY pEntry,
+                                                        int32_t x, int32_t y, bool *pfChanged)
+{
+    if (!pEntry)
+    {
+        WARN(("VBoxVrCompositorEntryRegionsTranslate called with zero entry, unsupported!"));
+        if (pfChanged)
+            *pfChanged = false;
+        return VERR_INVALID_PARAMETER;
+    }
+
+    vboxVrCompositorEntryAddRef(pEntry);
+
+    if (   (!x && !y)
+        || !VBoxVrCompositorEntryIsInList(pEntry))
+    {
+        if (pfChanged)
+            *pfChanged = false;
+
+        vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+        return VINF_SUCCESS;
+    }
+
+    VBoxVrListTranslate(&pEntry->Vr, x, y);
+
+    Assert(!VBoxVrListIsEmpty(&pEntry->Vr));
+
+    PVBOXVR_COMPOSITOR_ENTRY pCur;
+    uint32_t cRects = 0;
+    PRTRECT paRects = NULL;
+    int rc = VINF_SUCCESS;
+    RTListForEach(&pCompositor->List, pCur, VBOXVR_COMPOSITOR_ENTRY, Node)
+    {
+        Assert(!VBoxVrListIsEmpty(&pCur->Vr));
+
+        if (pCur == pEntry)
+            continue;
+
+        if (!paRects)
+        {
+            cRects = VBoxVrListRectsCount(&pEntry->Vr);
+            Assert(cRects);
+            paRects = (RTRECT*)RTMemAlloc(cRects * sizeof(RTRECT));
+            if (!paRects)
+            {
+                WARN(("RTMemAlloc failed!"));
+                rc = VERR_NO_MEMORY;
+                break;
+            }
+
+            rc = VBoxVrListRectsGet(&pEntry->Vr, cRects, paRects);
+            if (!RT_SUCCESS(rc))
+            {
+                WARN(("VBoxVrListRectsGet failed! rc %d", rc));
+                break;
+            }
+        }
+
+        rc = vboxVrCompositorEntryRegionsSubst(pCompositor, pCur, cRects, paRects, NULL);
+        if (!RT_SUCCESS(rc))
+        {
+            WARN(("vboxVrCompositorEntryRegionsSubst failed! rc %d", rc));
+            break;
+        }
+    }
+
+    if (pfChanged)
+        *pfChanged = true;
+
+    if (paRects)
+        RTMemFree(paRects);
+
+    vboxVrCompositorEntryRelease(pCompositor, pEntry, NULL);
+
+    return rc;
+}
+
+VBOXVREGDECL(void) VBoxVrCompositorVisit(PVBOXVR_COMPOSITOR pCompositor, PFNVBOXVRCOMPOSITOR_VISITOR pfnVisitor, void *pvVisitor)
+{
+    PVBOXVR_COMPOSITOR_ENTRY pEntry, pEntryNext;
+    RTListForEachSafe(&pCompositor->List, pEntry, pEntryNext, VBOXVR_COMPOSITOR_ENTRY, Node)
+    {
+        if (!pfnVisitor(pCompositor, pEntry, pvVisitor))
+            return;
+    }
+}
+
Index: /trunk/src/VBox/HostServices/SharedOpenGL/.scm-settings
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/.scm-settings	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/.scm-settings	(revision 86648)
@@ -0,0 +1,56 @@
+# $Id$
+## @file
+# Source code massager settings for the SharedOpenGL host service.
+#
+
+#
+# Copyright (C) 2017-2019 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+# The basic config here is external copyright, however there are lots of exceptions
+/*.h:                                             --external-copyright --no-convert-tabs --no-strip-trailing-blanks --no-fix-header-guards
+/crserverlib/presenter/server_presenter.h:        --no-external-copyright --convert-tabs --strip-trailing-blanks
+/render/renderspu_cocoa_helper.h:                 --no-external-copyright --convert-tabs --strip-trailing-blanks
+
+/*.c:                                             --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/*.cpp:                                           --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/crserver/crservice.cpp:                          --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/server_framebuffer.cpp:              --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/server_getshaders.cpp:               --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/server_glsl.cpp:                     --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/server_texture.cpp:                  --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/server_muralfbo.cpp:                 --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/server_rpw.cpp:                      --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/presenter/display_base.cpp:          --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/presenter/display_composite.cpp:     --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/presenter/display_window_rootvr.cpp: --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/presenter/display_window.cpp:        --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/presenter/display_vrdp.cpp:          --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/presenter/server_presenter.cpp:      --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/presenter/window.cpp:                --no-external-copyright --convert-tabs --strip-trailing-blanks
+/dlm/dlm_lists.c:                                 --no-external-copyright --convert-tabs --strip-trailing-blanks
+/dlm/dlm_state.c:                                 --no-external-copyright --convert-tabs --strip-trailing-blanks
+/expando/expandospu.c:                            --no-external-copyright --convert-tabs --strip-trailing-blanks
+/render/renderspu_cocoa.c:                        --no-external-copyright --convert-tabs --strip-trailing-blanks
+/unpacker/unpack_framebuffer.cpp:                 --no-external-copyright --convert-tabs --strip-trailing-blanks
+/unpacker/unpack_shaders.cpp:                     --no-external-copyright --convert-tabs --strip-trailing-blanks
+/unpacker/unpack_visibleregion.cpp:               --no-external-copyright --convert-tabs --strip-trailing-blanks
+/OpenGLTest/OpenGLTest.cpp:                       --no-external-copyright --convert-tabs --strip-trailing-blanks
+/OpenGLTest/OpenGLTestApp.cpp:                    --no-external-copyright --convert-tabs --strip-trailing-blanks
+/OpenGLTest/OpenGLTestDarwin.cpp:                 --no-external-copyright --convert-tabs --strip-trailing-blanks
+
+/*.def:                                           --external-copyright
+/*.py:                                            --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+
+--filter-out-files *_special
+--filter-out-files /LICENSE
+
Index: /trunk/src/VBox/HostServices/SharedOpenGL/LICENSE
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/LICENSE	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/LICENSE	(revision 86648)
@@ -0,0 +1,32 @@
+Copyright (c) 2002, Stanford University
+All rights reserved.
+
+Some portions of Chromium are copyrighted by individual organizations.
+Please see the files COPYRIGHT.LLNL and COPYRIGHT.REDHAT for more
+information.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of Stanford University nor the names of its contributors
+  may be used to endorse or promote products derived from this software
+  without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
Index: /trunk/src/VBox/HostServices/SharedOpenGL/Makefile.kmk
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/Makefile.kmk	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/Makefile.kmk	(revision 86648)
@@ -0,0 +1,143 @@
+# $Id$
+## @file
+# Sub-Makefile for the Shared OpenGL Host Service.
+#
+
+#
+# Copyright (C) 2008-2019 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+SUB_DEPTH = ../../../..
+include $(KBUILD_PATH)/subheader.kmk
+
+
+#
+# Target lists.
+#
+ifdef VBOX_WITH_MAIN
+LIBRARIES += VBoxOGLrenderspu
+BLDDIRS   += \
+	$(VBOX_PATH_CROGL_GENFILES)/
+endif
+
+ifeq ($(KBUILD_TARGET),darwin)
+ #
+ # We have to symlink the system headers of OpenGl cause they have some
+ # different directory hierarchy on Mac OS X (no /GL sub directory).
+ #
+ # See Config.kmk for the global variables.
+ #
+ INSTALLS += DarwinOpenGLHdrs
+ DarwinOpenGLHdrs_INST     = $(VBOX_DARWIN_OPENGL_INST)
+ DarwinOpenGLHdrs_SYMLINKS = \
+ 	$(foreach hdr, $(VBOX_DARWIN_OPENGL_HEADERS),\
+ 		$(hdr)=>$(VBOX_PATH_MACOSX_SDK)/System/Library/Frameworks/OpenGL.framework/Versions/Current/Headers/$(hdr))
+endif # darwin
+
+#
+# VBoxOGLrenderspu
+#
+VBoxOGLrenderspu_TEMPLATE = VBOXCROGLR3HOSTLIB
+VBoxOGLrenderspu_INTERMEDIATES = \
+	$(VBOX_PATH_CROGL_GENFILES)/state/cr_currentpointers.h \
+	$(VBOX_PATH_CROGL_GENFILES)/state/cr_statefuncs.h
+VBoxOGLrenderspu_INCS = $(VBOX_GRAPHICS_INCS)
+VBoxOGLrenderspu_SOURCES = \
+	render/renderspu.c \
+	render/renderspu_config.c \
+	render/renderspu_init.c
+VBoxOGLrenderspu_SOURCES.win     = \
+	render/renderspu_wgl.c
+VBoxOGLrenderspu_SOURCES.linux   = render/renderspu_glx.c
+VBoxOGLrenderspu_SOURCES.solaris = render/renderspu_glx.c
+VBoxOGLrenderspu_SOURCES.freebsd = render/renderspu_glx.c
+VBoxOGLrenderspu_OBJCFLAGS.darwin = -Wno-shadow
+VBoxOGLrenderspu_SOURCES.darwin  = \
+	OpenGLTest/OpenGLTestDarwin.cpp \
+	render/renderspu_cocoa.c \
+	render/renderspu_cocoa_helper.m
+ifdef VBOX_WITH_CRHGSMI
+VBoxOGLrenderspu_DEFS += VBOX_WITH_CRHGSMI
+endif
+ifdef VBOX_WITH_VDMA
+VBoxOGLrenderspu_DEFS += VBOX_WITH_VDMA
+endif
+
+LIBRARIES += VBoxOGLTest
+VBoxOGLTest_TEMPLATE = VBOXR3NP
+ifneq ($(KBUILD_TARGET),darwin)
+  VBoxOGLTest_SOURCES = OpenGLTest/OpenGLTest.cpp
+endif
+VBoxOGLTest_SOURCES.darwin = OpenGLTest/OpenGLTestDarwin.cpp
+
+#
+# VBoxTestOGL - OpenGL support test app.
+# Note! Doesn't link with VBOX_WITH_DEBUG_VCC_CRT defined because it uses Qt.
+#
+if (   defined(VBOX_WITH_QTGUI) \
+    && (defined(VBOX_WITH_CROGL) || defined(VBOX_WITH_VIDEOHWACCEL)) \
+    && !defined(VBOX_WITH_DEBUG_VCC_CRT))
+ ifneq ($(KBUILD_TARGET),darwin)
+  ifdef VBOX_WITH_VIDEOHWACCEL
+   USES += qt5
+  endif
+  PROGRAMS += VBoxTestOGL
+  VBoxTestOGL_TEMPLATE = $(if $(VBOX_WITH_VIDEOHWACCEL),$(if $(VBOX_WITH_HARDENING),VBOXQTGUI,VBOXQTGUIEXE),VBOXMAINEXE)
+  VBoxTestOGL_INCS     += $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES)
+  VBoxTestOGL_DEFS.win         = _WIN32_WINNT=0x0500 WINDOWS=1
+  VBoxTestOGL_DEFS.linux       = Linux=1 _GNU_SOURCE
+  VBoxTestOGL_DEFS.solaris     = SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED
+  VBoxTestOGL_DEFS.darwin      = DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE
+  VBoxTestOGL_DEFS.freebsd     = FreeBSD=1 _GNU_SOURCE
+  VBoxTestOGL_SOURCES = OpenGLTest/OpenGLTestApp.cpp
+  VBoxTestOGL_SOURCES.win = OpenGLTest/VBoxTestOGL.rc
+  VBoxTestOGL_LIBS = \
+  	$(if $(VBOX_WITH_CROGL), \
+  	    $(PATH_STAGE_LIB)/VBoxOGLhosterrorspu$(VBOX_SUFF_LIB) \
+	    $(PATH_STAGE_LIB)/VBoxOGLrenderspu$(VBOX_SUFF_LIB) \
+  	    $(PATH_STAGE_LIB)/VBoxOGLhostspuload$(VBOX_SUFF_LIB) \
+  	    $(PATH_STAGE_LIB)/VBoxOGLhostcrutil$(VBOX_SUFF_LIB),) \
+  	$(if $(VBOX_WITH_VIDEOHWACCEL), $(PATH_STAGE_LIB)/VBoxOGL2D$(VBOX_SUFF_LIB),) \
+  	$(LIB_RUNTIME)
+  VBoxTestOGL_DEFS += \
+    VBOX_BUILD_TARGET=\"$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)\" \
+    $(if $(VBOX_WITH_CROGL), VBOX_WITH_CROGL,) \
+    $(if $(VBOX_WITH_VIDEOHWACCEL), VBOX_WITH_VIDEOHWACCEL,)
+  ifdef VBOX_WITH_VIDEOHWACCEL
+   VBoxTestOGL_QT_MODULES   += Core Gui OpenGL Widgets
+   VBoxTestOGL_LIBS.linux   += xcb
+   VBoxTestOGL_LIBS.solaris += xcb
+   VBoxTestOGL_LIBS.freebsd += xcb
+   VBoxTestOGL_LDFLAGS.darwin += -framework OpenGL -framework IOKit
+   VBoxTestOGL_LIBS.win       += $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/Opengl32.lib
+   if1of ($(KBUILD_TARGET), solaris linux freebsd)
+    # must come after VBoxOGL2D, therefore don't set the arch-specific LIBS variable here!
+    VBoxTestOGL_LIBS += GL pthread dl
+   endif
+  endif
+  if1of ($(KBUILD_TARGET), freebsd linux netbsd openbsd solaris) # the X11 gang
+   VBoxTestOGL_LIBS += \
+  	Xmu \
+  	X11 \
+  	Xext
+   VBoxTestOGL_LIBPATH = \
+	$(VBOX_LIBPATH_X11)
+endif
+  # Don't let ld strip out explicitly linked libraries even when they are not needed.
+  # This was causing some dynamic library loading problems in case of indirect dependencies
+  # in systems where RUNPATH instead of RPATH is utilized.
+  VBoxTestOGL_LDFLAGS.linux = -Wl,--no-as-needed
+  VBoxTestOGL_LDFLAGS.win = /SUBSYSTEM:windows
+ endif
+endif
+
+include $(FILE_KBUILD_SUB_FOOTER)
+
Index: /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTest.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTest.cpp	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTest.cpp	(revision 86648)
@@ -0,0 +1,103 @@
+/* $Id$ */
+/** @file
+ * VBox host opengl support test - generic implementation.
+ */
+
+/*
+ * Copyright (C) 2009-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include <VBox/err.h>
+#include <iprt/assert.h>
+#include <iprt/env.h>
+#include <iprt/param.h>
+#include <iprt/path.h>
+#include <iprt/process.h>
+#include <iprt/string.h>
+#include <iprt/time.h>
+#include <iprt/thread.h>
+#include <iprt/env.h>
+#include <iprt/log.h>
+
+#include <VBox/VBoxOGL.h>
+
+bool RTCALL VBoxOglIs3DAccelerationSupported(void)
+{
+    if (RTEnvExist("VBOX_CROGL_FORCE_SUPPORTED"))
+    {
+        LogRel(("VBOX_CROGL_FORCE_SUPPORTED is specified, skipping 3D test, and treating as supported\n"));
+        return true;
+    }
+
+    static char pszVBoxPath[RTPATH_MAX];
+    const char *papszArgs[4] = { NULL, "-test", "3D", NULL};
+    int rc;
+    RTPROCESS Process;
+    RTPROCSTATUS ProcStatus;
+    uint64_t StartTS;
+
+#ifdef __SANITIZE_ADDRESS__
+    /* The OpenGL test tool contains a number of memory leaks which cause it to
+     * return failure when run with ASAN unless we disable the leak detector. */
+    RTENV env;
+    if (RT_FAILURE(RTEnvClone(&env, RTENV_DEFAULT)))
+        return false;
+    RTEnvPutEx(env, "ASAN_OPTIONS=detect_leaks=0");  /* If this fails we will notice later */
+#endif
+    rc = RTPathExecDir(pszVBoxPath, RTPATH_MAX); AssertRCReturn(rc, false);
+#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
+    rc = RTPathAppend(pszVBoxPath, RTPATH_MAX, "VBoxTestOGL.exe");
+#else
+    rc = RTPathAppend(pszVBoxPath, RTPATH_MAX, "VBoxTestOGL");
+#endif
+    papszArgs[0] = pszVBoxPath;         /* argv[0] */
+    AssertRCReturn(rc, false);
+
+#ifndef __SANITIZE_ADDRESS__
+    rc = RTProcCreate(pszVBoxPath, papszArgs, RTENV_DEFAULT, 0, &Process);
+#else
+    rc = RTProcCreate(pszVBoxPath, papszArgs, env, 0, &Process);
+    RTEnvDestroy(env);
+#endif
+    if (RT_FAILURE(rc))
+        return false;
+
+    StartTS = RTTimeMilliTS();
+
+    while (1)
+    {
+        rc = RTProcWait(Process, RTPROCWAIT_FLAGS_NOBLOCK, &ProcStatus);
+        if (rc != VERR_PROCESS_RUNNING)
+            break;
+
+#ifndef DEBUG_misha
+        if (RTTimeMilliTS() - StartTS > 30*1000 /* 30 sec */)
+        {
+            RTProcTerminate(Process);
+            RTThreadSleep(100);
+            RTProcWait(Process, RTPROCWAIT_FLAGS_NOBLOCK, &ProcStatus);
+            return false;
+        }
+#endif
+        RTThreadSleep(100);
+    }
+
+    if (RT_SUCCESS(rc))
+    {
+        if ((ProcStatus.enmReason==RTPROCEXITREASON_NORMAL) && (ProcStatus.iStatus==0))
+        {
+            return true;
+        }
+    }
+
+    return false;
+}
+
Index: /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestApp.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestApp.cpp	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestApp.cpp	(revision 86648)
@@ -0,0 +1,360 @@
+/* $Id$ */
+/** @file
+ * VBox host opengl support test application.
+ */
+
+/*
+ * Copyright (C) 2009-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include <iprt/assert.h>
+#include <iprt/buildconfig.h>
+#include <iprt/errcore.h>
+#include <iprt/getopt.h>
+#include <iprt/initterm.h>
+#include <iprt/stream.h>
+#ifdef RT_OS_WINDOWS
+# include <iprt/win/windows.h>
+#endif
+#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_OS2)
+# include <sys/resource.h>
+# include <fcntl.h>
+# include <unistd.h>
+#endif
+
+#include <string.h>
+
+#define VBOXGLTEST_WITH_LOGGING
+
+#ifdef VBOXGLTEST_WITH_LOGGING
+#include "package-generated.h"
+
+#include <iprt/log.h>
+#include <iprt/param.h>
+#include <iprt/time.h>
+#include <iprt/system.h>
+#include <iprt/process.h>
+#include <iprt/env.h>
+
+#include <VBox/log.h>
+#include <VBox/version.h>
+#endif
+
+#ifdef VBOX_WITH_VIDEOHWACCEL
+#include <QGLWidget>
+#include <QApplication>
+#include <VBox/VBoxGL2D.h>
+#endif
+
+#ifdef VBOX_WITH_CROGL
+#include <cr_spu.h>
+
+static int vboxCheck3DAccelerationSupported()
+{
+    LogRel(("Testing 3D Support:\n"));
+    PCSPUREG aSpuRegs[] = { &g_RenderSpuReg, &g_ErrorSpuReg, NULL};
+    SPU *spu = crSPUInitFromReg(NULL, 0, "render", NULL, &aSpuRegs[0]);
+    if (spu)
+    {
+        crSPUUnloadChain(spu);
+        LogRel(("Testing 3D Succeeded!\n"));
+        return 0;
+    }
+    LogRel(("Testing 3D Failed\n"));
+    return 1;
+}
+#endif
+
+#ifdef VBOX_WITH_VIDEOHWACCEL
+static int vboxCheck2DVideoAccelerationSupported()
+{
+    LogRel(("Testing 2D Support:\n"));
+    static int dummyArgc = 1;
+    static char * dummyArgv = (char*)"GlTest";
+    QApplication app (dummyArgc, &dummyArgv);
+
+    VBoxGLTmpContext ctx;
+    const QGLContext *pContext = ctx.makeCurrent();
+    if(pContext)
+    {
+        VBoxVHWAInfo supportInfo;
+        supportInfo.init(pContext);
+        if(supportInfo.isVHWASupported())
+        {
+            LogRel(("Testing 2D Succeeded!\n"));
+            return 0;
+        }
+    }
+    else
+    {
+        LogRel(("Failed to create gl context\n"));
+    }
+    LogRel(("Testing 2D Failed\n"));
+    return 1;
+}
+#endif
+
+#ifdef VBOXGLTEST_WITH_LOGGING
+static int vboxInitLogging(const char *pszFilename, bool bGenNameSuffix)
+{
+    PRTLOGGER loggerRelease;
+    static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES;
+    RTUINT fFlags = RTLOGFLAGS_PREFIX_TIME_PROG;
+#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
+    fFlags |= RTLOGFLAGS_USECRLF;
+#endif
+    const char * pszFilenameFmt;
+    RTLOGDEST enmLogDest;
+    if(pszFilename)
+    {
+        if(bGenNameSuffix)
+            pszFilenameFmt = "%s.%ld.log";
+        else
+            pszFilenameFmt = "%s";
+        enmLogDest = RTLOGDEST_FILE;
+    }
+    else
+    {
+        pszFilenameFmt = NULL;
+        enmLogDest = RTLOGDEST_STDOUT;
+    }
+
+    int vrc = RTLogCreateEx(&loggerRelease, fFlags, "all",
+                            "VBOX_RELEASE_LOG", RT_ELEMENTS(s_apszGroups), s_apszGroups, UINT32_MAX, enmLogDest,
+                            NULL /* pfnBeginEnd */, 0 /* cHistory */, 0 /* cbHistoryFileMax */, 0 /* uHistoryTimeMax */,
+                            NULL /* pErrInfo */, pszFilenameFmt, pszFilename, RTTimeMilliTS());
+    if (RT_SUCCESS(vrc))
+    {
+        /* some introductory information */
+        RTTIMESPEC timeSpec;
+        char szTmp[256];
+        RTTimeSpecToString(RTTimeNow(&timeSpec), szTmp, sizeof(szTmp));
+        RTLogRelLogger(loggerRelease, 0, ~0U,
+                       "VBoxTestGL %s r%u %s (%s %s) release log\n"
+#ifdef VBOX_BLEEDING_EDGE
+                       "EXPERIMENTAL build " VBOX_BLEEDING_EDGE "\n"
+#endif
+                       "Log opened %s\n",
+                       VBOX_VERSION_STRING, RTBldCfgRevision(), VBOX_BUILD_TARGET,
+                       __DATE__, __TIME__, szTmp);
+
+        vrc = RTSystemQueryOSInfo(RTSYSOSINFO_PRODUCT, szTmp, sizeof(szTmp));
+        if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
+            RTLogRelLogger(loggerRelease, 0, ~0U, "OS Product: %s\n", szTmp);
+        vrc = RTSystemQueryOSInfo(RTSYSOSINFO_RELEASE, szTmp, sizeof(szTmp));
+        if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
+            RTLogRelLogger(loggerRelease, 0, ~0U, "OS Release: %s\n", szTmp);
+        vrc = RTSystemQueryOSInfo(RTSYSOSINFO_VERSION, szTmp, sizeof(szTmp));
+        if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
+            RTLogRelLogger(loggerRelease, 0, ~0U, "OS Version: %s\n", szTmp);
+        vrc = RTSystemQueryOSInfo(RTSYSOSINFO_SERVICE_PACK, szTmp, sizeof(szTmp));
+        if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
+            RTLogRelLogger(loggerRelease, 0, ~0U, "OS Service Pack: %s\n", szTmp);
+//        RTLogRelLogger(loggerRelease, 0, ~0U, "Host RAM: %uMB RAM, available: %uMB\n",
+//                       uHostRamMb, uHostRamAvailMb);
+        /* the package type is interesting for Linux distributions */
+        char szExecName[RTPATH_MAX];
+        char *pszExecName = RTProcGetExecutablePath(szExecName, sizeof(szExecName));
+        RTLogRelLogger(loggerRelease, 0, ~0U,
+                       "Executable: %s\n"
+                       "Process ID: %u\n"
+                       "Package type: %s"
+#ifdef VBOX_OSE
+                       " (OSE)"
+#endif
+                       "\n",
+                       pszExecName ? pszExecName : "unknown",
+                       RTProcSelf(),
+                       VBOX_PACKAGE_STRING);
+
+        /* register this logger as the release logger */
+        RTLogRelSetDefaultInstance(loggerRelease);
+
+        return VINF_SUCCESS;
+    }
+
+    return vrc;
+}
+#endif
+
+static int vboxInitQuietMode()
+{
+#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_OS2)
+    /* This small test application might crash on some hosts. Do never
+     * generate a core dump as most likely some OpenGL library is
+     * responsible. */
+    struct rlimit lim = { 0, 0 };
+    setrlimit(RLIMIT_CORE, &lim);
+
+    /* Redirect stderr to /dev/null */
+    int fd = open("/dev/null", O_WRONLY);
+    if (fd != -1)
+        dup2(fd, STDERR_FILENO);
+#endif
+    return 0;
+}
+
+int main(int argc, char **argv)
+{
+    int rc = 0;
+
+    RTR3InitExe(argc, &argv, 0);
+
+    if(argc < 2)
+    {
+#ifdef VBOX_WITH_CROGL
+        /* backwards compatibility: check 3D */
+        rc = vboxCheck3DAccelerationSupported();
+#endif
+    }
+    else
+    {
+        static const RTGETOPTDEF s_aOptionDefs[] =
+        {
+            { "--test",           't',   RTGETOPT_REQ_STRING },
+            { "-test",            't',   RTGETOPT_REQ_STRING },
+#ifdef VBOXGLTEST_WITH_LOGGING
+            { "--log",            'l',   RTGETOPT_REQ_STRING },
+#endif
+        };
+
+        RTGETOPTSTATE State;
+        rc = RTGetOptInit(&State, argc-1, argv+1, &s_aOptionDefs[0], RT_ELEMENTS(s_aOptionDefs), 0, 0);
+        AssertRCReturn(rc, 49);
+
+#ifdef VBOX_WITH_VIDEOHWACCEL
+        bool bTest2D = false;
+#endif
+#ifdef VBOX_WITH_CROGL
+        bool bTest3D = false;
+#endif
+#ifdef VBOXGLTEST_WITH_LOGGING
+        bool bLog = false;
+        bool bLogSuffix = false;
+        const char * pLog = NULL;
+#endif
+
+        for (;;)
+        {
+            RTGETOPTUNION Val;
+            rc = RTGetOpt(&State, &Val);
+            if (!rc)
+                break;
+            switch (rc)
+            {
+                case 't':
+#ifdef VBOX_WITH_CROGL
+                    if (!strcmp(Val.psz, "3D") || !strcmp(Val.psz, "3d"))
+                    {
+                        bTest3D = true;
+                        rc = 0;
+                        break;
+                    }
+#endif
+#ifdef VBOX_WITH_VIDEOHWACCEL
+                    if (!strcmp(Val.psz, "2D") || !strcmp(Val.psz, "2d"))
+                    {
+                        bTest2D = true;
+                        rc = 0;
+                        break;
+                    }
+#endif
+                    rc = 1;
+                    break;
+#ifdef VBOXGLTEST_WITH_LOGGING
+                case 'l':
+                    bLog = true;
+                    pLog = Val.psz;
+                    rc = 0;
+                    break;
+#endif
+                case 'h':
+                    RTPrintf(VBOX_PRODUCT " Helper for testing 2D/3D OpenGL capabilities %u.%u.%u\n"
+                             "(C) 2009-" VBOX_C_YEAR " " VBOX_VENDOR "\n"
+                             "All rights reserved.\n"
+                             "\n"
+                             "Parameters:\n"
+#ifdef VBOX_WITH_VIDEOHWACCEL
+                             "  --test 2D             test for 2D (video) OpenGL capabilities\n"
+#endif
+#ifdef VBOX_WITH_CROGL
+                             "  --test 3D             test for 3D OpenGL capabilities\n"
+#endif
+#ifdef VBOXGLTEST_WITH_LOGGING
+                             "  --log <log_file_name> log the GL test result to the given file\n"
+                             "\n"
+                             "Logging can alternatively be enabled by specifying the VBOXGLTEST_LOG=<log_file_name> env variable\n"
+
+#endif
+                             "\n",
+                            RTBldCfgVersionMajor(), RTBldCfgVersionMinor(), RTBldCfgVersionBuild());
+                    break;
+
+                case 'V':
+                    RTPrintf("$Revision$\n");
+                    return 0;
+
+                case VERR_GETOPT_UNKNOWN_OPTION:
+                case VINF_GETOPT_NOT_OPTION:
+                    rc = 1;
+
+                default:
+                    /* complain? RTGetOptPrintError(rc, &Val); */
+                    break;
+            }
+
+            if (rc)
+                break;
+        }
+
+        if(!rc)
+        {
+#ifdef VBOXGLTEST_WITH_LOGGING
+            if(!bLog)
+            {
+                /* check the VBOXGLTEST_LOG env var */
+                pLog = RTEnvGet("VBOXGLTEST_LOG");
+                if(pLog)
+                    bLog = true;
+                bLogSuffix = true;
+            }
+            if(bLog)
+                rc = vboxInitLogging(pLog, bLogSuffix);
+            else
+#endif
+                rc = vboxInitQuietMode();
+
+#ifdef VBOX_WITH_CROGL
+            if(!rc && bTest3D)
+                rc = vboxCheck3DAccelerationSupported();
+#endif
+
+#ifdef VBOX_WITH_VIDEOHWACCEL
+            if(!rc && bTest2D)
+                rc = vboxCheck2DVideoAccelerationSupported();
+#endif
+
+        }
+    }
+
+    /*RTR3Term();*/
+    return rc;
+
+}
+
+#ifdef RT_OS_WINDOWS
+extern "C" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
+{
+    RT_NOREF(hInstance, hPrevInstance, lpCmdLine, nShowCmd);
+    return main(__argc, __argv);
+}
+#endif
+
Index: /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestDarwin.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestDarwin.cpp	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestDarwin.cpp	(revision 86648)
@@ -0,0 +1,172 @@
+/* $Id$ */
+/** @file
+ * VBox host opengl support test
+ */
+
+/*
+ * Copyright (C) 2009-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include <VBox/VBoxOGL.h>
+
+#include <IOKit/IOKitLib.h>
+#include <OpenGL/OpenGL.h>
+#include <ApplicationServices/ApplicationServices.h>
+#include <OpenGL/gl.h>
+#include <OpenGL/glu.h>
+
+#include <iprt/env.h>
+#include <iprt/log.h>
+#include <iprt/once.h>
+
+
+
+/**
+ * @callback_method_impl{FNRTONCE,
+ *  For determining the cached VBoxOglIsOfflineRenderingAppropriate result.}
+ */
+static DECLCALLBACK(int32_t) vboxOglIsOfflineRenderingAppropriateOnce(void *pvUser)
+{
+    bool *pfAppropriate = (bool *)pvUser;
+
+    /* It is assumed that it is makes sense to enable offline rendering
+       only in case if host has more than one GPU installed. This routine
+       counts all the PCI devices in IORegistry which have IOName property
+       set to "display". If the number of such devices is greater than one,
+       it sets pfAppropriate to TRUE, otherwise to FALSE. */
+
+    CFStringRef apKeyStrings[]   = { CFSTR(kIOProviderClassKey), CFSTR(kIONameMatchKey) };
+    CFStringRef apValueStrings[] = { CFSTR("IOPCIDevice"),       CFSTR("display") };
+    Assert(RT_ELEMENTS(apKeyStrings) == RT_ELEMENTS(apValueStrings));
+
+    CFDictionaryRef pMatchingDictionary = CFDictionaryCreate(kCFAllocatorDefault,
+                                                             (const void **)apKeyStrings,
+                                                             (const void **)apValueStrings,
+                                                             RT_ELEMENTS(apKeyStrings),
+                                                             &kCFTypeDictionaryKeyCallBacks,
+                                                             &kCFTypeDictionaryValueCallBacks);
+    if (pMatchingDictionary)
+    {
+        /* The reference to pMatchingDictionary is consumed by the function below => no IORelease(pMatchingDictionary)! */
+        io_iterator_t matchingServices;
+        kern_return_t krc = IOServiceGetMatchingServices(kIOMasterPortDefault, pMatchingDictionary, &matchingServices);
+        if (krc == kIOReturnSuccess)
+        {
+            io_object_t matchingService;
+            int         cMatchingServices = 0;
+
+            while ((matchingService = IOIteratorNext(matchingServices)) != 0)
+            {
+                cMatchingServices++;
+                IOObjectRelease(matchingService);
+            }
+
+            *pfAppropriate = cMatchingServices > 1;
+
+            IOObjectRelease(matchingServices);
+        }
+    }
+
+    LogRel(("OpenGL: Offline rendering support is %s (pid=%d)\n", *pfAppropriate ? "ON" : "OFF", (int)getpid()));
+    return VINF_SUCCESS;
+}
+
+
+bool RTCALL VBoxOglIsOfflineRenderingAppropriate(void)
+{
+    /* In order to do not slowdown 3D engine which can ask about offline rendering several times,
+       let's cache the result and assume that renderers amount value is constant. Use the IPRT
+       execute once construct to make sure there aren't any threading issues. */
+    static RTONCE s_Once = RTONCE_INITIALIZER;
+    static bool   s_fCached = false;
+    int rc = RTOnce(&s_Once, vboxOglIsOfflineRenderingAppropriateOnce, &s_fCached);
+    AssertRC(rc);
+    return s_fCached;
+}
+
+
+bool RTCALL VBoxOglIs3DAccelerationSupported(void)
+{
+    if (RTEnvExist("VBOX_CROGL_FORCE_SUPPORTED"))
+    {
+        LogRel(("VBOX_CROGL_FORCE_SUPPORTED is specified, skipping 3D test, and treating as supported\n"));
+        return true;
+    }
+
+    CGOpenGLDisplayMask     cglDisplayMask = CGDisplayIDToOpenGLDisplayMask(CGMainDisplayID());
+    CGLPixelFormatAttribute aAttribs[] =
+    {
+        kCGLPFADisplayMask,
+        (CGLPixelFormatAttribute)cglDisplayMask,
+        kCGLPFAAccelerated,
+        kCGLPFADoubleBuffer,
+        VBoxOglIsOfflineRenderingAppropriate() ? kCGLPFAAllowOfflineRenderers : (CGLPixelFormatAttribute)NULL,
+        (CGLPixelFormatAttribute)NULL
+    };
+    CGLPixelFormatObj pPixelFormat = NULL;
+    GLint             cPixelFormatsIgnored = 0;
+    CGLError rcCgl = CGLChoosePixelFormat(aAttribs, &pPixelFormat, &cPixelFormatsIgnored);
+    if (rcCgl != kCGLNoError)
+    {
+        LogRel(("OpenGL Info: 3D test unable to choose pixel format (rcCgl=0x%X)\n", rcCgl));
+        return false;
+    }
+
+    if (pPixelFormat)
+    {
+        CGLContextObj pCglContext = 0;
+        rcCgl = CGLCreateContext(pPixelFormat, NULL, &pCglContext);
+        CGLDestroyPixelFormat(pPixelFormat);
+
+        if (rcCgl != kCGLNoError)
+        {
+            LogRel(("OpenGL Info: 3D test unable to create context (rcCgl=0x%X)\n", rcCgl));
+            return false;
+        }
+
+        if (pCglContext)
+        {
+            GLboolean isSupported = GL_TRUE;
+
+            /*
+             * In the Cocoa port we depend on the GL_EXT_framebuffer_object &
+             * the GL_EXT_texture_rectangle extension. If they are not
+             * available, disable 3D support.
+             */
+            CGLSetCurrentContext(pCglContext);
+            const GLubyte *pszExts = glGetString(GL_EXTENSIONS);
+            isSupported = gluCheckExtension((const GLubyte *)"GL_EXT_framebuffer_object", pszExts);
+            if (isSupported)
+            {
+                isSupported = gluCheckExtension((const GLubyte *)"GL_EXT_texture_rectangle", pszExts);
+                if (!isSupported)
+                    LogRel(("OpenGL Info: 3D test found that GL_EXT_texture_rectangle extension not supported.\n"));
+            }
+            else
+                LogRel(("OpenGL Info: 3D test found that GL_EXT_framebuffer_object extension not supported.\n"));
+
+            CGLDestroyContext(pCglContext);
+            LogRel(("OpenGL Info: 3D test %spassed\n", isSupported == GL_TRUE ? "" : "not "));
+            return isSupported == GL_TRUE;
+        }
+
+        LogRel(("OpenGL Info: 3D test unable to create context (internal error).\n"));
+    }
+    else
+        LogRel(("OpenGL Info: 3D test unable to choose pixel format (internal error).\n"));
+
+    return false;
+}
+
Index: /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/VBoxTestOGL.rc
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/VBoxTestOGL.rc	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/OpenGLTest/VBoxTestOGL.rc	(revision 86648)
@@ -0,0 +1,51 @@
+/* $Id$ */
+/** @file
+ * VBoxTestOGL - Resource file containing version info and icon.
+ */
+
+/*
+ * Copyright (C) 2015-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include <windows.h>
+#include <VBox/version.h>
+
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION      VBOX_RC_FILE_VERSION
+  PRODUCTVERSION   VBOX_RC_FILE_VERSION
+  FILEFLAGSMASK    VS_FFI_FILEFLAGSMASK
+  FILEFLAGS        VBOX_RC_FILE_FLAGS
+  FILEOS           VBOX_RC_FILE_OS
+  FILETYPE         VBOX_RC_TYPE_APP
+  FILESUBTYPE      VFT2_UNKNOWN
+BEGIN
+  BLOCK "StringFileInfo"
+  BEGIN
+    BLOCK "040904b0" // Lang=US English, CharSet=Unicode
+    BEGIN
+      VALUE "FileDescription",  "VirtualBox OpenGL Test Tool\0"
+      VALUE "InternalName",     "VBoxTestOGL\0"
+      VALUE "OriginalFilename", "VBoxTestOGL.exe\0"
+      VALUE "CompanyName",      VBOX_RC_COMPANY_NAME
+      VALUE "FileVersion",      VBOX_RC_FILE_VERSION_STR
+      VALUE "LegalCopyright",   VBOX_RC_LEGAL_COPYRIGHT
+      VALUE "ProductName",      VBOX_RC_PRODUCT_NAME_STR
+      VALUE "ProductVersion",   VBOX_RC_PRODUCT_VERSION_STR
+      VBOX_RC_MORE_STRINGS
+    END
+  END
+  BLOCK "VarFileInfo"
+  BEGIN
+    VALUE "Translation", 0x409, 1200
+  END
+END
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.c	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.c	(revision 86648)
@@ -0,0 +1,1925 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "cr_string.h"
+#include "cr_error.h"
+#include "cr_mem.h"
+#include "cr_spu.h"
+#include "renderspu.h"
+#include "cr_extstring.h"
+
+#include <iprt/asm.h>
+
+#include <stdio.h> /*sprintf*/
+
+uint32_t renderspuContextRelease(ContextInfo *context);
+uint32_t renderspuContextRetain(ContextInfo *context);
+
+static void
+DoSync(void)
+{
+    CRMessage *in, out;
+
+    out.header.type = CR_MESSAGE_OOB;
+
+    crNetSend( render_spu.swap_conns[0], NULL, &out, sizeof(CRMessage));
+
+    crNetGetMessage( render_spu.swap_conns[0], &in );
+    crNetFree( render_spu.swap_conns[0], in);
+}
+
+
+
+/*
+ * Visual functions
+ */
+
+/**
+ * used for debugging and giving info to the user.
+ */
+void
+renderspuMakeVisString( GLbitfield visAttribs, char *s )
+{
+    s[0] = 0;
+
+    if (visAttribs & CR_RGB_BIT)
+        crStrcat(s, "RGB");
+    if (visAttribs & CR_ALPHA_BIT)
+        crStrcat(s, "A");
+    if (visAttribs & CR_DOUBLE_BIT)
+        crStrcat(s, ", Doublebuffer");
+    if (visAttribs & CR_STEREO_BIT)
+        crStrcat(s, ", Stereo");
+    if (visAttribs & CR_DEPTH_BIT)
+        crStrcat(s, ", Z");
+    if (visAttribs & CR_STENCIL_BIT)
+        crStrcat(s, ", Stencil");
+    if (visAttribs & CR_ACCUM_BIT)
+        crStrcat(s, ", Accum");
+    if (visAttribs & CR_MULTISAMPLE_BIT)
+        crStrcat(s, ", Multisample");
+    if (visAttribs & CR_OVERLAY_BIT)
+        crStrcat(s, ", Overlay");
+    if (visAttribs & CR_PBUFFER_BIT)
+        crStrcat(s, ", PBuffer");
+}
+
+GLboolean renderspuInitVisual(VisualInfo *pVisInfo, const char *displayName, GLbitfield visAttribs)
+{
+    pVisInfo->displayName = crStrdup(displayName);
+    pVisInfo->visAttribs = visAttribs;
+    return renderspu_SystemInitVisual(pVisInfo);
+}
+
+/*
+ * Find a VisualInfo which matches the given display name and attribute
+ * bitmask, or return a pointer to a new visual.
+ */
+VisualInfo *
+renderspuFindVisual(const char *displayName, GLbitfield visAttribs)
+{
+    int i;
+
+    if (!displayName)
+        displayName = "";
+
+    /* first, try to find a match */
+#if defined(WINDOWS) || defined(DARWIN)
+    for (i = 0; i < render_spu.numVisuals; i++) {
+        if (visAttribs == render_spu.visuals[i].visAttribs) {
+            return &(render_spu.visuals[i]);
+        }
+    }
+#elif defined(GLX)
+    for (i = 0; i < render_spu.numVisuals; i++) {
+        if (crStrcmp(displayName, render_spu.visuals[i].displayName) == 0
+            && visAttribs == render_spu.visuals[i].visAttribs) {
+            return &(render_spu.visuals[i]);
+        }
+    }
+#endif
+
+    if (render_spu.numVisuals >= MAX_VISUALS)
+    {
+        crWarning("Render SPU: Couldn't create a visual, too many visuals already");
+        return NULL;
+    }
+
+    /* create a new visual */
+    i = render_spu.numVisuals;
+    if (renderspuInitVisual(&(render_spu.visuals[i]), displayName, visAttribs)) {
+        render_spu.numVisuals++;
+        return &(render_spu.visuals[i]);
+    }
+    else {
+        crWarning("Render SPU: Couldn't get a visual, renderspu_SystemInitVisual failed");
+        return NULL;
+    }
+}
+
+static ContextInfo * renderspuCreateContextInternal(const char *dpyName, GLint visBits, GLint idCtx, ContextInfo * sharedContext)
+{
+    ContextInfo *context;
+    VisualInfo *visual;
+
+    if (idCtx <= 0)
+    {
+        idCtx = (GLint)crHashtableAllocKeys(render_spu.contextTable, 1);
+        if (idCtx <= 0)
+        {
+            crWarning("failed to allocate context id");
+            return NULL;
+        }
+    }
+    else
+    {
+        if (crHashtableIsKeyUsed(render_spu.contextTable, idCtx))
+        {
+            crWarning("the specified ctx key %d is in use", idCtx);
+            return NULL;
+        }
+    }
+
+
+    if (!dpyName || crStrlen(render_spu.display_string)>0)
+        dpyName = render_spu.display_string;
+
+    visual = renderspuFindVisual(dpyName, visBits);
+    if (!visual)
+        return NULL;
+
+    context = (ContextInfo *) crCalloc(sizeof(ContextInfo));
+    if (!context)
+        return NULL;
+    context->BltInfo.Base.id = idCtx;
+    context->shared = sharedContext;
+    if (!renderspu_SystemCreateContext(visual, context, sharedContext))
+        return NULL;
+
+    crHashtableAdd(render_spu.contextTable, idCtx, context);
+
+    context->BltInfo.Base.visualBits = visual->visAttribs;
+    /*
+    crDebug("Render SPU: CreateContext(%s, 0x%x) returning %d",
+                    dpyName, visBits, context->BltInfo.Base.id);
+    */
+
+    if (sharedContext)
+        renderspuContextRetain(sharedContext);
+
+    context->cRefs = 1;
+
+    return context;
+}
+
+GLint renderspuCreateContextEx(const char *dpyName, GLint visBits, GLint id, GLint shareCtx)
+{
+    ContextInfo *context, *sharedContext = NULL;
+
+    if (shareCtx) {
+        sharedContext
+            = (ContextInfo *) crHashtableSearch(render_spu.contextTable, shareCtx);
+        CRASSERT(sharedContext);
+    }
+
+    context = renderspuCreateContextInternal(dpyName, visBits, id, sharedContext);
+    if (context)
+        return context->BltInfo.Base.id;
+    return -1;
+}
+
+/*
+ * Context functions
+ */
+
+GLint RENDER_APIENTRY
+renderspuCreateContext(const char *dpyName, GLint visBits, GLint shareCtx)
+{
+    return renderspuCreateContextEx(dpyName, visBits, 0, shareCtx);
+}
+
+static void renderspuDestroyContextTerminate( ContextInfo *context )
+{
+    CRASSERT(context->BltInfo.Base.id == -1);
+    renderspu_SystemDestroyContext( context );
+    if (context->extensionString) {
+        crFree(context->extensionString);
+        context->extensionString = NULL;
+    }
+
+    if (context->shared)
+        renderspuContextRelease( context->shared );
+
+    crFree(context);
+}
+
+uint32_t renderspuContextRetain( ContextInfo *context )
+{
+    Assert(context->cRefs);
+    return ASMAtomicIncU32(&context->cRefs);
+}
+
+uint32_t renderspuContextRelease( ContextInfo *context )
+{
+    uint32_t cRefs = ASMAtomicDecU32(&context->cRefs);
+    if (!cRefs)
+        renderspuDestroyContextTerminate( context );
+    else
+        CRASSERT(cRefs < UINT32_MAX/2);
+    return cRefs;
+}
+
+uint32_t renderspuContextMarkDeletedAndRelease( ContextInfo *context )
+{
+    /* invalidate the context id to mark it as deleted */
+    context->BltInfo.Base.id = -1;
+
+    /* some drivers do not like when the base (shared) context is deleted before its referals,
+     * this is why we keep a context refference counting the base (shared) context will be destroyed as soon as*/
+    return renderspuContextRelease( context );
+}
+
+ContextInfo * renderspuDefaultSharedContextAcquire(void)
+{
+    ContextInfo * pCtx = render_spu.defaultSharedContext;
+    if (!pCtx)
+        return NULL;
+
+    renderspuContextRetain(pCtx);
+    return pCtx;
+}
+
+void renderspuDefaultSharedContextRelease(ContextInfo * pCtx)
+{
+    renderspuContextRelease(pCtx);
+}
+
+
+static void RENDER_APIENTRY
+renderspuDestroyContext( GLint ctx )
+{
+    ContextInfo *context, *curCtx;
+
+    CRASSERT(ctx);
+
+    if (ctx == CR_RENDER_DEFAULT_CONTEXT_ID)
+    {
+        crWarning("request to destroy a default context, ignoring");
+        return;
+    }
+
+    context = (ContextInfo *) crHashtableSearch(render_spu.contextTable, ctx);
+
+    if (!context)
+    {
+        crWarning("request to delete inexistent context");
+        return;
+    }
+
+    if (render_spu.defaultSharedContext == context)
+    {
+        renderspuSetDefaultSharedContext(NULL);
+    }
+
+    curCtx = GET_CONTEXT_VAL();
+//    CRASSERT(curCtx);
+    if (curCtx == context)
+    {
+        renderspuMakeCurrent( CR_RENDER_DEFAULT_WINDOW_ID, 0, CR_RENDER_DEFAULT_CONTEXT_ID );
+        curCtx = GET_CONTEXT_VAL();
+		Assert(curCtx);
+		Assert(curCtx != context);
+    }
+
+    crHashtableDelete(render_spu.contextTable, ctx, NULL);
+
+    renderspuContextMarkDeletedAndRelease(context);
+}
+
+WindowInfo* renderspuWinCreate(GLint visBits, GLint id)
+{
+    WindowInfo* window = (WindowInfo *)crAlloc(sizeof (*window));
+    if (!window)
+    {
+        crWarning("crAlloc failed");
+        return NULL;
+    }
+
+    if (!renderspuWinInit(window, NULL, visBits, id))
+    {
+        crWarning("renderspuWinInit failed");
+        crFree(window);
+        return NULL;
+    }
+
+    return window;
+}
+
+void renderspuWinTermOnShutdown(WindowInfo *window)
+{
+    renderspuVBoxCompositorSet(window, NULL);
+    renderspuVBoxPresentBlitterCleanup(window);
+    window->BltInfo.Base.id = -1;
+    renderspu_SystemDestroyWindow( window );
+}
+
+static void renderspuCheckCurrentCtxWindowCB(unsigned long key, void *data1, void *data2)
+{
+    ContextInfo *pCtx = (ContextInfo *) data1;
+    WindowInfo *pWindow = data2;
+    (void) key;
+
+    if (pCtx->currentWindow==pWindow)
+    {
+        WindowInfo* pDummy = renderspuGetDummyWindow(pCtx->BltInfo.Base.visualBits);
+        if (pDummy)
+        {
+            renderspuPerformMakeCurrent(pDummy, 0, pCtx);
+        }
+        else
+        {
+            crWarning("failed to get dummy window");
+            renderspuMakeCurrent(CR_RENDER_DEFAULT_WINDOW_ID, 0, pCtx->BltInfo.Base.id);
+        }
+    }
+}
+
+void renderspuWinTerm( WindowInfo *window )
+{
+    if (!renderspuWinIsTermed(window))
+    {
+
+    GET_CONTEXT(pOldCtx);
+    WindowInfo * pOldWindow = pOldCtx ? pOldCtx->currentWindow : NULL;
+    CRASSERT(!pOldCtx == !pOldWindow);
+    /* ensure no concurrent draws can take place */
+    renderspuWinTermOnShutdown(window);
+    /* check if this window is bound to some ctx. Note: window pointer is already freed here */
+    crHashtableWalk(render_spu.contextTable, renderspuCheckCurrentCtxWindowCB, window);
+    /* restore current context */
+    {
+        GET_CONTEXT(pNewCtx);
+        WindowInfo * pNewWindow = pNewCtx ? pNewCtx->currentWindow : NULL;
+        CRASSERT(!pNewCtx == !pNewWindow);
+
+        if (pOldWindow == window)
+            renderspuMakeCurrent(CR_RENDER_DEFAULT_WINDOW_ID, 0, CR_RENDER_DEFAULT_CONTEXT_ID);
+        else if (pNewCtx != pOldCtx || pOldWindow != pNewWindow)
+        {
+            if (pOldCtx)
+                renderspuPerformMakeCurrent(pOldWindow, 0, pOldCtx);
+            else
+                renderspuMakeCurrent(CR_RENDER_DEFAULT_WINDOW_ID, 0, CR_RENDER_DEFAULT_CONTEXT_ID);
+        }
+    }
+
+    }
+}
+
+void renderspuWinCleanup(WindowInfo *window)
+{
+    renderspuWinTerm( window );
+    crFree(window->title);
+    RTCritSectDelete(&window->CompositorLock);
+}
+
+void renderspuWinDestroy(WindowInfo *window)
+{
+    renderspuWinCleanup(window);
+    crFree(window);
+}
+
+WindowInfo* renderspuGetDummyWindow(GLint visBits)
+{
+    WindowInfo *window = (WindowInfo *) crHashtableSearch(render_spu.dummyWindowTable, visBits);
+    if (!window)
+    {
+        window = renderspuWinCreate(visBits, -1);
+        if (!window)
+        {
+            WARN(("renderspuWinCreate failed"));
+            return NULL;
+        }
+
+        crHashtableAdd(render_spu.dummyWindowTable, visBits, window);
+    }
+
+    return window;
+}
+
+/* Check that OpenGL extensions listed in pszRequiredExts string also exist in the pszAvailableExts string. */
+static void renderCompareGLExtensions(const char *pszAvailableExts, const char *pszRequiredExts)
+{
+    unsigned char fPrintHeader = 1;
+    const char *pszExt = pszRequiredExts;
+
+    for (;;)
+    {
+        const char *pszSrc = pszAvailableExts;
+        size_t offExtEnd;
+
+        while (*pszExt == ' ')
+            ++pszExt;
+
+        if (!*pszExt)
+            break;
+
+        offExtEnd = RTStrOffCharOrTerm(pszExt, ' ');
+
+        for (;;)
+        {
+            size_t offSrcEnd;
+
+            while (*pszSrc == ' ')
+                ++pszSrc;
+
+            if (!*pszSrc)
+                break;
+
+            offSrcEnd = RTStrOffCharOrTerm(pszSrc, ' ');
+
+            if (   offSrcEnd == offExtEnd
+                && memcmp(pszSrc, pszExt, offSrcEnd) == 0)
+                    break;
+
+            pszSrc += offSrcEnd;
+        }
+
+        if (!*pszSrc)
+        {
+            if (fPrintHeader)
+            {
+                fPrintHeader = 0;
+                crInfo("Host does not support OpenGL extension(s):");
+            }
+            crInfo("  %.*s", offExtEnd, pszExt);
+        }
+
+        pszExt += offExtEnd;
+    }
+}
+
+void renderspuPerformMakeCurrent(WindowInfo *window, GLint nativeWindow, ContextInfo *context)
+{
+    if (window && context)
+    {
+        crSetTSD(&_RenderTSD, context);
+        context->currentWindow = window;
+
+        renderspu_SystemMakeCurrent( window, nativeWindow, context );
+        if (!context->everCurrent) {
+            static volatile uint32_t u32ExtCompared = 0;
+            /* print OpenGL info */
+            const char *extString = (const char *) render_spu.ws.glGetString( GL_EXTENSIONS );
+            /*
+            crDebug( "Render SPU: GL_EXTENSIONS:   %s", render_spu.ws.glGetString( GL_EXTENSIONS ) );
+            */
+            crInfo( "Render SPU: GL_VENDOR:   %s", render_spu.ws.glGetString( GL_VENDOR ) );
+            crInfo( "Render SPU: GL_RENDERER: %s", render_spu.ws.glGetString( GL_RENDERER ) );
+            crInfo( "Render SPU: GL_VERSION:  %s", render_spu.ws.glGetString( GL_VERSION ) );
+            crInfo( "Render SPU: GL_EXTENSIONS: %s", render_spu.ws.glGetString( GL_EXTENSIONS ) );
+
+            if (ASMAtomicCmpXchgU32(&u32ExtCompared, 1, 0))
+                renderCompareGLExtensions(extString, crExtensions);
+
+            if (crStrstr(extString, "GL_ARB_window_pos"))
+                context->haveWindowPosARB = GL_TRUE;
+            else
+                context->haveWindowPosARB = GL_FALSE;
+            context->everCurrent = GL_TRUE;
+        }
+        if (window->BltInfo.Base.id == CR_RENDER_DEFAULT_WINDOW_ID && window->mapPending &&
+                !render_spu.render_to_app_window && !render_spu.render_to_crut_window) {
+            /* Window[CR_RENDER_DEFAULT_CONTEXT_ID] is special, it's the default window and normally hidden.
+             * If the mapPending flag is set, then we should now make the window
+             * visible.
+             */
+            /*renderspu_SystemShowWindow( window, GL_TRUE );*/
+            window->mapPending = GL_FALSE;
+        }
+        window->everCurrent = GL_TRUE;
+    }
+    else if (!window && !context)
+    {
+        renderspu_SystemMakeCurrent( NULL, 0, NULL );
+        crSetTSD(&_RenderTSD, NULL);
+    }
+    else
+    {
+        crError("renderspuMakeCurrent invalid ids: crWindow(%d), ctx(%d)",
+                window ? window->BltInfo.Base.id : 0,
+                context ? context->BltInfo.Base.id : 0);
+    }
+}
+
+void RENDER_APIENTRY
+renderspuMakeCurrent(GLint crWindow, GLint nativeWindow, GLint ctx)
+{
+    WindowInfo *window = NULL;
+    ContextInfo *context = NULL;
+
+    /*
+    crDebug("%s win=%d native=0x%x ctx=%d", __FUNCTION__, crWindow, (int) nativeWindow, ctx);
+    */
+
+    if (crWindow)
+    {
+        window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, crWindow);
+        if (!window)
+        {
+            crWarning("invalid window %d specified", crWindow);
+            return;
+        }
+    }
+
+    if (ctx)
+    {
+        context = (ContextInfo *) crHashtableSearch(render_spu.contextTable, ctx);
+        if (!context)
+        {
+            crWarning("invalid context %d specified", ctx);
+            return;
+        }
+    }
+
+    if (!context != !window)
+    {
+        crWarning("either window %d or context %d are zero", crWindow, ctx);
+        return;
+    }
+
+    renderspuPerformMakeCurrent(window, nativeWindow, context);
+}
+
+GLboolean renderspuWinInitWithVisual( WindowInfo *window, VisualInfo *visual, GLboolean showIt, GLint id )
+{
+    crMemset(window, 0, sizeof (*window));
+    RTCritSectInit(&window->CompositorLock);
+    window->pCompositor = NULL;
+
+    window->BltInfo.Base.id = id;
+
+    window->x = render_spu.defaultX;
+    window->y = render_spu.defaultY;
+    window->BltInfo.width  = render_spu.defaultWidth;
+    window->BltInfo.height = render_spu.defaultHeight;
+
+    /* Set window->title, replacing %i with the window ID number */
+    {
+        const char *s = crStrstr(render_spu.window_title, "%i");
+        if (s) {
+            int i, j, k;
+            window->title = crAlloc(crStrlen(render_spu.window_title) + 10);
+            for (i = 0; render_spu.window_title[i] != '%'; i++)
+                window->title[i] = render_spu.window_title[i];
+            k = sprintf(window->title + i, "%d", window->BltInfo.Base.id);
+            CRASSERT(k < 10);
+            i++; /* skip the 'i' after the '%' */
+            j = i + k;
+            for (; (window->title[j] = s[i]) != 0; i++, j++)
+                ;
+        }
+        else {
+            window->title = crStrdup(render_spu.window_title);
+        }
+    }
+        
+    window->BltInfo.Base.visualBits = visual->visAttribs;
+    
+    window->cRefs = 1;
+    
+    /*
+    crDebug("Render SPU: Creating window (visBits=0x%x, id=%d)", visBits, window->BltInfo.Base.id);
+    */
+    /* Have GLX/WGL/AGL create the window */
+    if (!renderspu_SystemVBoxCreateWindow( visual, showIt, window ))
+    {
+        crWarning( "Render SPU: Couldn't create a window, renderspu_SystemCreateWindow failed" );
+        return GL_FALSE;
+    }
+    
+    window->visible = !!showIt;
+
+    CRASSERT(window->visual == visual);
+    return GL_TRUE;
+}
+
+/*
+ * Window functions
+ */
+GLboolean renderspuWinInit(WindowInfo *pWindow, const char *dpyName, GLint visBits, GLint id)
+{
+    VisualInfo *visual;
+
+    crMemset(pWindow, 0, sizeof (*pWindow));
+
+    if (!dpyName || crStrlen(render_spu.display_string) > 0)
+        dpyName = render_spu.display_string;
+
+    visual = renderspuFindVisual( dpyName, visBits );
+    if (!visual)
+    {
+        crWarning( "Render SPU: Couldn't create a window, renderspuFindVisual returned NULL" );
+        return GL_FALSE;
+    }
+
+    /*
+    crDebug("Render SPU: Creating window (visBits=0x%x, id=%d)", visBits, window->BltInfo.Base.id);
+    */
+    /* Have GLX/WGL/AGL create the window */
+    if (!renderspuWinInitWithVisual( pWindow, visual, 0, id ))
+    {
+        crWarning( "Render SPU: Couldn't create a window, renderspu_SystemCreateWindow failed" );
+        return GL_FALSE;
+    }
+
+    return GL_TRUE;
+}
+
+GLint renderspuWindowCreateEx( const char *dpyName, GLint visBits, GLint id )
+{
+    WindowInfo *window;
+
+    RT_NOREF(dpyName);
+
+    if (id <= 0)
+    {
+        id = (GLint)crHashtableAllocKeys(render_spu.windowTable, 1);
+        if (id <= 0)
+        {
+            crWarning("failed to allocate window id");
+            return -1;
+        }
+    }
+    else
+    {
+        if (crHashtableIsKeyUsed(render_spu.windowTable, id))
+        {
+            crWarning("the specified window key %d is in use", id);
+            return -1;
+        }
+    }
+
+    /* Allocate WindowInfo */
+    window = renderspuWinCreate(visBits, id);
+
+    if (!window)
+    {
+        crWarning("renderspuWinCreate failed");
+        crFree(window);
+        return -1;
+    }
+
+    crHashtableAdd(render_spu.windowTable, id, window);
+    return window->BltInfo.Base.id;
+}
+
+GLint RENDER_APIENTRY
+renderspuWindowCreate( const char *dpyName, GLint visBits )
+{
+    return renderspuWindowCreateEx( dpyName, visBits, 0 );
+}
+
+void renderspuWinReleaseCb(void*pvWindow)
+{
+    renderspuWinRelease((WindowInfo*)pvWindow);
+}
+
+void
+RENDER_APIENTRY renderspuWindowDestroy( GLint win )
+{
+    WindowInfo *window;
+
+    CRASSERT(win >= 0);
+    if (win == CR_RENDER_DEFAULT_WINDOW_ID)
+    {
+        crWarning("request to destroy a default mural, ignoring");
+        return;
+    }
+    window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, win);
+    if (window) {
+        crDebug("Render SPU: Destroy window (%d)", win);
+        /* since os-specific backend can hold its own reference to the window object (e.g. on OSX),
+         * we need to explicitly issue a window destroy command
+         * this ensures the backend will eventually release the reference,
+         * the window object itself will remain valid until its ref count reaches zero */
+        renderspuWinTerm( window );
+
+        /* remove window info from hash table, and free it */
+        crHashtableDelete(render_spu.windowTable, win, renderspuWinReleaseCb);
+
+    }
+    else {
+        crDebug("Render SPU: Attempt to destroy invalid window (%d)", win);
+    }
+}
+
+
+static void RENDER_APIENTRY
+renderspuWindowSize( GLint win, GLint w, GLint h )
+{
+    WindowInfo *window;
+    CRASSERT(win >= 0);
+    window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, win);
+    if (window) {
+        if (   (GLuint)w != window->BltInfo.width
+            || (GLuint)h != window->BltInfo.height)
+        {
+            /* window is resized, compositor data is no longer valid
+             * this set also ensures all redraw operations are done in the redraw thread
+             * and that no redraw is started until new Present request comes containing a valid presentation data */
+            renderspuVBoxCompositorSet( window, NULL);
+            renderspu_SystemWindowSize( window, w, h );
+            window->BltInfo.width  = w;
+            window->BltInfo.height = h;
+        }
+    }
+    else {
+        WARN(("Render SPU: Attempt to resize invalid window (%d)", win));
+    }
+}
+
+
+static void RENDER_APIENTRY
+renderspuWindowPosition( GLint win, GLint x, GLint y )
+{
+    if (!render_spu.ignore_window_moves) {
+        WindowInfo *window;
+        CRASSERT(win >= 0);
+        window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, win);
+        if (window) {
+            renderspu_SystemWindowPosition( window, x, y );
+            window->x = x;
+            window->y = y;
+        }
+        else {
+            crDebug("Render SPU: Attempt to move invalid window (%d)", win);
+        }
+    }
+}
+
+#ifdef DEBUG_misha
+# define CR_DBG_DUMP_VISIBLE_REGIONS
+#endif
+
+#ifdef CR_DBG_DUMP_VISIBLE_REGIONS
+static void renderspuDbgDumpVisibleRegion(GLint win, GLint cRects, const GLint *pRects)
+{
+    GLint i;
+    const RTRECT *pRtRects = (const RTRECT *)((const void*)pRects);
+
+    crInfo("Window %d, Vidible Regions%d", win, cRects);
+    for (i = 0; i < cRects; ++i)
+    {
+        crInfo("%d: (%d,%d), (%d,%d)", i, pRtRects[i].xLeft, pRtRects[i].yTop, pRtRects[i].xRight, pRtRects[i].yBottom);
+    }
+    crInfo("======");
+}
+#endif
+
+static void RENDER_APIENTRY
+renderspuWindowVisibleRegion(GLint win, GLint cRects, const GLint *pRects)
+{
+    WindowInfo *window;
+    CRASSERT(win >= 0);
+
+#ifdef CR_DBG_DUMP_VISIBLE_REGIONS
+    renderspuDbgDumpVisibleRegion(win, cRects, pRects);
+#endif
+
+    window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, win);
+    if (window) {
+        renderspu_SystemWindowVisibleRegion( window, cRects, pRects );
+    }
+    else {
+        crWarning("Render SPU: Attempt to set VisibleRegion for invalid window (%d)", win);
+    }
+}
+
+static void RENDER_APIENTRY
+renderspuWindowShow( GLint win, GLint flag )
+{
+    WindowInfo *window;
+    CRASSERT(win >= 0);
+    window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, win);
+    if (window) {
+        GLboolean visible;
+        if (window->nativeWindow) {
+            /* We're rendering back to the native app window instead of the
+             * new window which we (the Render SPU) created earlier.
+             * So, we never want to show the Render SPU's window.
+             */
+            flag = 0;
+        }
+        
+        visible = !!flag;
+        
+//        if (window->visible != visible)
+        {
+            renderspu_SystemShowWindow( window, visible );
+            window->visible = visible;
+        }
+    }
+    else {
+        crDebug("Render SPU: Attempt to hide/show invalid window (%d)", win);
+    }
+}
+
+static void RENDER_APIENTRY
+renderspuVBoxPresentComposition( GLint win, const struct VBOXVR_SCR_COMPOSITOR * pCompositor, const struct VBOXVR_SCR_COMPOSITOR_ENTRY *pChangedEntry )
+{
+    WindowInfo *window;
+    CRASSERT(win >= 0);
+    window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, win);
+    if (window) {
+        if (renderspuVBoxCompositorSet(window, pCompositor))
+        {
+            renderspu_SystemVBoxPresentComposition(window, pChangedEntry);
+        }
+    }
+    else {
+        crDebug("Render SPU: Attempt to PresentComposition for invalid window (%d)", win);
+    }
+}
+
+void renderspuVBoxCompositorBlitStretched ( const struct VBOXVR_SCR_COMPOSITOR * pCompositor, PCR_BLITTER pBlitter, GLfloat scaleX, GLfloat scaleY)
+{
+    VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR CIter;
+    const VBOXVR_SCR_COMPOSITOR_ENTRY *pEntry;
+    CrVrScrCompositorConstIterInit(pCompositor, &CIter);
+    while ((pEntry = CrVrScrCompositorConstIterNext(&CIter)) != NULL)
+    {
+        uint32_t cRegions;
+        const RTRECT *paSrcRegions, *paDstRegions;
+        int rc = CrVrScrCompositorEntryRegionsGet(pCompositor, pEntry, &cRegions, &paSrcRegions, &paDstRegions, NULL);
+        uint32_t fFlags = CrVrScrCompositorEntryFlagsCombinedGet(pCompositor, pEntry);
+        if (RT_SUCCESS(rc))
+        {
+            uint32_t i;
+            for (i = 0; i < cRegions; ++i)
+            {
+                RTRECT DstRect;
+                const CR_TEXDATA *pTexData = CrVrScrCompositorEntryTexGet(pEntry);
+                DstRect.xLeft = paDstRegions[i].xLeft * scaleX;
+                DstRect.yTop = paDstRegions[i].yTop * scaleY;
+                DstRect.xRight = paDstRegions[i].xRight * scaleX;
+                DstRect.yBottom = paDstRegions[i].yBottom * scaleY;
+                CrBltBlitTexMural(pBlitter, true, CrTdTexGet(pTexData), &paSrcRegions[i], &DstRect, 1, fFlags);
+            }
+        }
+        else
+        {
+            crWarning("BlitStretched: CrVrScrCompositorEntryRegionsGet failed rc %d", rc);
+        }
+    }
+}
+
+void renderspuVBoxCompositorBlit ( const struct VBOXVR_SCR_COMPOSITOR * pCompositor, PCR_BLITTER pBlitter)
+{
+    VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR CIter;
+    const VBOXVR_SCR_COMPOSITOR_ENTRY *pEntry;
+    CrVrScrCompositorConstIterInit(pCompositor, &CIter);
+    while ((pEntry = CrVrScrCompositorConstIterNext(&CIter)) != NULL)
+    {
+        uint32_t cRegions;
+        const RTRECT *paSrcRegions, *paDstRegions;
+        int rc = CrVrScrCompositorEntryRegionsGet(pCompositor, pEntry, &cRegions, &paSrcRegions, &paDstRegions, NULL);
+        uint32_t fFlags = CrVrScrCompositorEntryFlagsCombinedGet(pCompositor, pEntry);
+        if (RT_SUCCESS(rc))
+        {
+            const CR_TEXDATA *pTexData = CrVrScrCompositorEntryTexGet(pEntry);
+            CrBltBlitTexMural(pBlitter, true, CrTdTexGet(pTexData), paSrcRegions, paDstRegions, cRegions, fFlags);
+        }
+        else
+        {
+            crWarning("Blit: CrVrScrCompositorEntryRegionsGet failed rc %d", rc);
+        }
+    }
+}
+
+void renderspuVBoxPresentBlitterCleanup( WindowInfo *window )
+{
+    if (!window->pBlitter)
+        return;
+
+    if (render_spu.blitterTable)
+    {
+        const CR_BLITTER_WINDOW * pBltInfo = CrBltMuralGetCurrentInfo(window->pBlitter);
+        if (pBltInfo && pBltInfo->Base.id == window->BltInfo.Base.id)
+        {
+            CrBltMuralSetCurrentInfo(window->pBlitter, NULL);
+        }
+    }
+    else
+    {
+        CRASSERT(CrBltMuralGetCurrentInfo(window->pBlitter)->Base.id == window->BltInfo.Base.id);
+        CrBltMuralSetCurrentInfo(window->pBlitter, NULL);
+        CrBltTerm(window->pBlitter);
+    }
+    window->pBlitter = NULL;
+}
+
+PCR_BLITTER renderspuVBoxPresentBlitterGet( WindowInfo *window )
+{
+    PCR_BLITTER pBlitter = window->pBlitter;
+    if (!pBlitter)
+    {
+        if (render_spu.blitterTable)
+        {
+            crHashtableLock(render_spu.blitterTable);
+            pBlitter = (PCR_BLITTER)crHashtableSearch(render_spu.blitterTable, window->visual->visAttribs);
+        }
+
+        if (!pBlitter)
+        {
+            int rc;
+            ContextInfo * pDefaultCtxInfo;
+
+            pBlitter = (PCR_BLITTER)crCalloc(sizeof (*pBlitter));
+            if (!pBlitter)
+            {
+                crWarning("failed to allocate blitter");
+                return NULL;
+            }
+
+            pDefaultCtxInfo = renderspuDefaultSharedContextAcquire();
+            if (!pDefaultCtxInfo)
+            {
+                crWarning("no default ctx info!");
+                crFree(pBlitter);
+                return NULL;
+            }
+
+            rc = CrBltInit(pBlitter, &pDefaultCtxInfo->BltInfo, true, true, NULL, &render_spu.blitterDispatch);
+
+            /* we can release it either way, since it will be retained when used as a shared context */
+            renderspuDefaultSharedContextRelease(pDefaultCtxInfo);
+
+            if (!RT_SUCCESS(rc))
+            {
+                crWarning("CrBltInit failed, rc %d", rc);
+                crFree(pBlitter);
+                return NULL;
+            }
+
+            if (render_spu.blitterTable)
+            {
+                crHashtableAdd( render_spu.blitterTable, window->visual->visAttribs, pBlitter );
+            }
+        }
+
+        if (render_spu.blitterTable)
+            crHashtableUnlock(render_spu.blitterTable);
+
+        Assert(pBlitter);
+        window->pBlitter = pBlitter;
+    }
+
+    CrBltMuralSetCurrentInfo(pBlitter, &window->BltInfo);
+    return pBlitter;
+}
+
+int renderspuVBoxPresentBlitterEnter( PCR_BLITTER pBlitter, int32_t i32MakeCurrentUserData)
+{
+    int rc;
+
+    CrBltSetMakeCurrentUserData(pBlitter, i32MakeCurrentUserData);
+
+    rc = CrBltEnter(pBlitter);
+    if (!RT_SUCCESS(rc))
+    {
+        crWarning("CrBltEnter failed, rc %d", rc);
+        return rc;
+    }
+    return VINF_SUCCESS;
+}
+
+PCR_BLITTER renderspuVBoxPresentBlitterGetAndEnter( WindowInfo *window, int32_t i32MakeCurrentUserData, bool fRedraw )
+{
+    PCR_BLITTER pBlitter = fRedraw ? window->pBlitter : renderspuVBoxPresentBlitterGet(window);
+    if (pBlitter)
+    {
+        int rc = renderspuVBoxPresentBlitterEnter(pBlitter, i32MakeCurrentUserData);
+        if (RT_SUCCESS(rc))
+        {
+            return pBlitter;
+        }
+    }
+    return NULL;
+}
+
+PCR_BLITTER renderspuVBoxPresentBlitterEnsureCreated( WindowInfo *window, int32_t i32MakeCurrentUserData )
+{
+    if (!window->pBlitter)
+    {
+        const struct VBOXVR_SCR_COMPOSITOR * pTmpCompositor;
+        /* just use compositor lock to synchronize */
+        pTmpCompositor = renderspuVBoxCompositorAcquire(window);
+        CRASSERT(pTmpCompositor);
+        if (pTmpCompositor)
+        {
+            PCR_BLITTER pBlitter = renderspuVBoxPresentBlitterGet( window );
+            if (pBlitter)
+            {
+                if (!CrBltIsEverEntered(pBlitter))
+                {
+                    int rc = renderspuVBoxPresentBlitterEnter(pBlitter, i32MakeCurrentUserData);
+                    if (RT_SUCCESS(rc))
+                    {
+                        CrBltLeave(pBlitter);
+                    }
+                    else
+                    {
+                        crWarning("renderspuVBoxPresentBlitterEnter failed rc %d", rc);
+                    }
+                }
+            }
+            else
+            {
+                crWarning("renderspuVBoxPresentBlitterGet failed");
+            }
+
+            renderspuVBoxCompositorRelease(window);
+        }
+        else
+        {
+            crWarning("renderspuVBoxCompositorAcquire failed");
+        }
+    }
+    return window->pBlitter;
+}
+
+void renderspuVBoxPresentCompositionGeneric( WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR * pCompositor,
+        const struct VBOXVR_SCR_COMPOSITOR_ENTRY *pChangedEntry, int32_t i32MakeCurrentUserData,
+        bool fRedraw )
+{
+    PCR_BLITTER pBlitter = renderspuVBoxPresentBlitterGetAndEnter(window, i32MakeCurrentUserData, fRedraw);
+
+    RT_NOREF(pChangedEntry);
+    if (!pBlitter)
+        return;
+
+    renderspuVBoxCompositorBlit(pCompositor, pBlitter);
+
+    renderspu_SystemSwapBuffers(window, 0);
+
+    CrBltLeave(pBlitter);
+}
+
+GLboolean renderspuVBoxCompositorSet( WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR * pCompositor)
+{
+    int rc;
+    GLboolean fEmpty = pCompositor && CrVrScrCompositorIsEmpty(pCompositor);
+    GLboolean fNeedPresent;
+
+    /* renderspuVBoxCompositorSet can be invoked from the chromium thread only and is not reentrant,
+     * no need to synch here
+     * the lock is actually needed to ensure we're in synch with the redraw thread */
+    if (window->pCompositor == pCompositor && !fEmpty)
+        return !!pCompositor;
+
+    rc = RTCritSectEnter(&window->CompositorLock);
+    if (RT_SUCCESS(rc))
+    {
+        if (!fEmpty)
+            fNeedPresent = !!pCompositor;
+        else
+        {
+            fNeedPresent = renderspu_SystemWindowNeedEmptyPresent(window);
+            pCompositor = NULL;
+        }
+
+        window->pCompositor = !fEmpty ? pCompositor : NULL;
+        RTCritSectLeave(&window->CompositorLock);
+        return fNeedPresent;
+    }
+    else
+    {
+        WARN(("RTCritSectEnter failed rc %d", rc));
+    }
+
+    return GL_FALSE;
+}
+
+static void renderspuVBoxCompositorClearAllCB(unsigned long key, void *data1, void *data2)
+{
+    WindowInfo *window = (WindowInfo *) data1;
+    RT_NOREF(key, data2);
+
+    renderspuVBoxCompositorSet(window, NULL);
+}
+
+void renderspuVBoxCompositorClearAll(void)
+{
+    /* we need to clear window compositor, which is not that trivial though,
+     * since the lock order used in presentation thread is compositor lock() -> hash table lock (aquired for id->window resolution)
+     * this is why, to prevent potential deadlocks, we use crHashtableWalkUnlocked that does not hold the table lock
+     * we are can be sure noone will modify the table here since renderspuVBoxCompositorClearAll can be called in the command (hgcm) thread only,
+     * and the table can be modified from that thread only as well */
+    crHashtableWalkUnlocked(render_spu.windowTable, renderspuVBoxCompositorClearAllCB, NULL);
+}
+
+const struct VBOXVR_SCR_COMPOSITOR * renderspuVBoxCompositorAcquire( WindowInfo *window)
+{
+    int rc = RTCritSectEnter(&window->CompositorLock);
+    if (RT_SUCCESS(rc))
+    {
+        const VBOXVR_SCR_COMPOSITOR * pCompositor = window->pCompositor;
+        if (pCompositor)
+        {
+            Assert(!CrVrScrCompositorIsEmpty(window->pCompositor));
+            return pCompositor;
+        }
+
+        /* if no compositor is set, release the lock and return */
+        RTCritSectLeave(&window->CompositorLock);
+    }
+    else
+    {
+        crWarning("RTCritSectEnter failed rc %d", rc);
+    }
+    return NULL;
+}
+
+int renderspuVBoxCompositorLock(WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR **ppCompositor)
+{
+    int rc = RTCritSectEnter(&window->CompositorLock);
+    if (RT_SUCCESS(rc))
+    {
+        if (ppCompositor)
+            *ppCompositor = window->pCompositor;
+    }
+    else
+        WARN(("RTCritSectEnter failed %d", rc));
+    return rc;
+}
+
+int renderspuVBoxCompositorUnlock(WindowInfo *window)
+{
+    int rc = RTCritSectLeave(&window->CompositorLock);
+    AssertRC(rc);
+    return rc;
+}
+
+int renderspuVBoxCompositorTryAcquire(WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR **ppCompositor)
+{
+    int rc = RTCritSectTryEnter(&window->CompositorLock);
+    if (RT_SUCCESS(rc))
+    {
+        *ppCompositor = window->pCompositor;
+        if (*ppCompositor)
+        {
+            Assert(!CrVrScrCompositorIsEmpty(window->pCompositor));
+            return VINF_SUCCESS;
+        }
+
+        /* if no compositor is set, release the lock and return */
+        RTCritSectLeave(&window->CompositorLock);
+        rc = VERR_INVALID_STATE;
+    }
+    else
+    {
+        *ppCompositor = NULL;
+    }
+    return rc;
+}
+
+void renderspuVBoxCompositorRelease( WindowInfo *window)
+{
+    int rc;
+    Assert(window->pCompositor);
+    Assert(!CrVrScrCompositorIsEmpty(window->pCompositor));
+    rc = RTCritSectLeave(&window->CompositorLock);
+    if (!RT_SUCCESS(rc))
+    {
+        crWarning("RTCritSectLeave failed rc %d", rc);
+    }
+}
+
+
+/*
+ * Set the current raster position to the given window coordinate.
+ */
+static void
+SetRasterPos( GLint winX, GLint winY )
+{
+    GLfloat fx, fy;
+
+    /* Push current matrix mode and viewport attributes */
+    render_spu.self.PushAttrib( GL_TRANSFORM_BIT | GL_VIEWPORT_BIT );
+
+    /* Setup projection parameters */
+    render_spu.self.MatrixMode( GL_PROJECTION );
+    render_spu.self.PushMatrix();
+    render_spu.self.LoadIdentity();
+    render_spu.self.MatrixMode( GL_MODELVIEW );
+    render_spu.self.PushMatrix();
+    render_spu.self.LoadIdentity();
+
+    render_spu.self.Viewport( winX - 1, winY - 1, 2, 2 );
+
+    /* set the raster (window) position */
+    /* huh ? */
+    fx = (GLfloat) (winX - (int) winX);
+    fy = (GLfloat) (winY - (int) winY);
+    render_spu.self.RasterPos4f( fx, fy, 0.0, 1.0 );
+
+    /* restore matrices, viewport and matrix mode */
+    render_spu.self.PopMatrix();
+    render_spu.self.MatrixMode( GL_PROJECTION );
+    render_spu.self.PopMatrix();
+
+    render_spu.self.PopAttrib();
+}
+
+
+/*
+ * Draw the mouse pointer bitmap at (x,y) in window coords.
+ */
+static void DrawCursor( GLint x, GLint y )
+{
+#define POINTER_WIDTH   32
+#define POINTER_HEIGHT  32
+    /* Somebody artistic could probably do better here */
+    static const char *pointerImage[POINTER_HEIGHT] =
+    {
+        "XX..............................",
+        "XXXX............................",
+        ".XXXXX..........................",
+        ".XXXXXXX........................",
+        "..XXXXXXXX......................",
+        "..XXXXXXXXXX....................",
+        "...XXXXXXXXXXX..................",
+        "...XXXXXXXXXXXXX................",
+        "....XXXXXXXXXXXXXX..............",
+        "....XXXXXXXXXXXXXXXX............",
+        ".....XXXXXXXXXXXXXXXXX..........",
+        ".....XXXXXXXXXXXXXXXXXXX........",
+        "......XXXXXXXXXXXXXXXXXXXX......",
+        "......XXXXXXXXXXXXXXXXXXXXXX....",
+        ".......XXXXXXXXXXXXXXXXXXXXXXX..",
+        ".......XXXXXXXXXXXXXXXXXXXXXXXX.",
+        "........XXXXXXXXXXXXX...........",
+        "........XXXXXXXX.XXXXX..........",
+        ".........XXXXXX...XXXXX.........",
+        ".........XXXXX.....XXXXX........",
+        "..........XXX.......XXXXX.......",
+        "..........XX.........XXXXX......",
+        "......................XXXXX.....",
+        ".......................XXXXX....",
+        "........................XXX.....",
+        ".........................X......",
+        "................................",
+        "................................",
+        "................................",
+        "................................",
+        "................................",
+        "................................"
+
+    };
+    static GLubyte pointerBitmap[POINTER_HEIGHT][POINTER_WIDTH / 8];
+    static GLboolean firstCall = GL_TRUE;
+    GLboolean lighting, depthTest, scissorTest;
+
+    if (firstCall) {
+        /* Convert pointerImage into pointerBitmap */
+        GLint i, j;
+        for (i = 0; i < POINTER_HEIGHT; i++) {
+            for (j = 0; j < POINTER_WIDTH; j++) {
+                if (pointerImage[POINTER_HEIGHT - i - 1][j] == 'X') {
+                    GLubyte bit = 128 >> (j & 0x7);
+                    pointerBitmap[i][j / 8] |= bit;
+                }
+            }
+        }
+        firstCall = GL_FALSE;
+    }
+
+    render_spu.self.GetBooleanv(GL_LIGHTING, &lighting);
+    render_spu.self.GetBooleanv(GL_DEPTH_TEST, &depthTest);
+    render_spu.self.GetBooleanv(GL_SCISSOR_TEST, &scissorTest);
+    render_spu.self.Disable(GL_LIGHTING);
+    render_spu.self.Disable(GL_DEPTH_TEST);
+    render_spu.self.Disable(GL_SCISSOR_TEST);
+    render_spu.self.PixelStorei(GL_UNPACK_ALIGNMENT, 1);
+
+    render_spu.self.Color3f(1, 1, 1);
+
+    /* save current raster pos */
+    render_spu.self.PushAttrib(GL_CURRENT_BIT);
+    SetRasterPos(x, y);
+    render_spu.self.Bitmap(POINTER_WIDTH, POINTER_HEIGHT, 1.0, 31.0, 0, 0,
+                                (const GLubyte *) pointerBitmap);
+    /* restore current raster pos */
+    render_spu.self.PopAttrib();
+
+    if (lighting)
+       render_spu.self.Enable(GL_LIGHTING);
+    if (depthTest)
+       render_spu.self.Enable(GL_DEPTH_TEST);
+    if (scissorTest)
+        render_spu.self.Enable(GL_SCISSOR_TEST);
+}
+
+void RENDER_APIENTRY renderspuSwapBuffers( GLint window, GLint flags )
+{
+    WindowInfo *w = (WindowInfo *) crHashtableSearch(render_spu.windowTable, window);
+
+    if (!w)
+    {
+        crDebug("Render SPU: SwapBuffers invalid window id: %d", window);
+        return;
+    }
+
+    if (flags & CR_SUPPRESS_SWAP_BIT)
+    {
+        render_spu.self.Finish();
+        return;
+    }
+
+    if (render_spu.drawCursor)
+        DrawCursor( render_spu.cursorX, render_spu.cursorY );
+
+    renderspu_SystemSwapBuffers( w, flags );
+}
+
+
+/*
+ * Barrier functions
+ * Normally, we'll have a crserver somewhere that handles the barrier calls.
+ * However, if we're running the render SPU on the client node, then we
+ * should handle barriers here.  The threadtest demo illustrates this.
+ * If we have N threads calling using this SPU we need these barrier
+ * functions to synchronize them.
+ */
+
+static void RENDER_APIENTRY renderspuBarrierCreateCR( GLuint name, GLuint count )
+{
+    Barrier *b;
+
+    if (render_spu.ignore_papi)
+        return;
+
+    b = (Barrier *) crHashtableSearch( render_spu.barrierHash, name );
+    if (b) {
+        /* HACK -- this allows everybody to create a barrier, and all
+           but the first creation are ignored, assuming the count
+           match. */
+        if ( b->count != count ) {
+            crError( "Render SPU: Barrier name=%u created with count=%u, but already "
+                     "exists with count=%u", name, count, b->count );
+        }
+    }
+    else {
+        b = (Barrier *) crAlloc( sizeof(Barrier) );
+        b->count = count;
+        crInitBarrier( &b->barrier, count );
+        crHashtableAdd( render_spu.barrierHash, name, b );
+    }
+}
+
+static void RENDER_APIENTRY renderspuBarrierDestroyCR( GLuint name )
+{
+    if (render_spu.ignore_papi)
+        return;
+    crHashtableDelete( render_spu.barrierHash, name, crFree );
+}
+
+static void RENDER_APIENTRY renderspuBarrierExecCR( GLuint name )
+{
+    Barrier *b;
+
+    if (render_spu.ignore_papi)
+        return;
+
+    b = (Barrier *) crHashtableSearch( render_spu.barrierHash, name );
+    if (b) {
+        crWaitBarrier( &(b->barrier) );
+    }
+    else {
+        crWarning("Render SPU: Bad barrier name %d in BarrierExec()", name);
+    }
+}
+
+
+/*
+ * Semaphore functions
+ * XXX we should probably implement these too, for the same reason as
+ * barriers (see above).
+ */
+
+static void RENDER_APIENTRY renderspuSemaphoreCreateCR( GLuint name, GLuint count )
+{
+    (void) name;
+    (void) count;
+}
+
+static void RENDER_APIENTRY renderspuSemaphoreDestroyCR( GLuint name )
+{
+    (void) name;
+}
+
+static void RENDER_APIENTRY renderspuSemaphorePCR( GLuint name )
+{
+    (void) name;
+}
+
+static void RENDER_APIENTRY renderspuSemaphoreVCR( GLuint name )
+{
+    (void) name;
+}
+
+
+/*
+ * Misc functions
+ */
+void renderspuSetDefaultSharedContext(ContextInfo *pCtx)
+{
+    if (pCtx == render_spu.defaultSharedContext)
+        return;
+
+    renderspu_SystemDefaultSharedContextChanged(render_spu.defaultSharedContext, pCtx);
+
+    if (render_spu.defaultSharedContext)
+        renderspuContextRelease(render_spu.defaultSharedContext);
+
+    if (pCtx)
+        renderspuContextRetain(pCtx);
+    render_spu.defaultSharedContext = pCtx;
+}
+
+static void RENDER_APIENTRY renderspuChromiumParameteriCR(GLenum target, GLint value)
+{
+    switch (target)
+    {
+        case GL_HH_SET_DEFAULT_SHARED_CTX:
+        {
+            ContextInfo * pCtx = NULL;
+            if (value)
+                pCtx = (ContextInfo *)crHashtableSearch(render_spu.contextTable, value);
+            else
+                crWarning("invalid default shared context id %d", value);
+
+            renderspuSetDefaultSharedContext(pCtx);
+            break;
+        }
+        case GL_HH_RENDERTHREAD_INFORM:
+        {
+            if (value)
+            {
+                int rc = renderspuDefaultCtxInit();
+                if (RT_FAILURE(rc))
+                {
+                    WARN(("renderspuDefaultCtxInit failed"));
+                    break;
+                }
+            }
+            else
+            {
+                renderspuCleanupBase(false);
+            }
+            break;
+        }
+        default:
+//            crWarning("Unhandled target in renderspuChromiumParameteriCR()");
+            break;
+    }
+}
+
+static void RENDER_APIENTRY
+renderspuChromiumParameterfCR(GLenum target, GLfloat value)
+{
+    (void) target;
+    (void) value;
+
+#if 0
+    switch (target) {
+    default:
+        crWarning("Unhandled target in renderspuChromiumParameterfCR()");
+        break;
+    }
+#endif
+}
+
+bool renderspuCalloutAvailable(void)
+{
+    return render_spu.pfnClientCallout != NULL;
+}
+
+bool renderspuCalloutClient(PFNVCRSERVER_CLIENT_CALLOUT_CB pfnCb, void *pvCb)
+{
+    if (render_spu.pfnClientCallout)
+    {
+        render_spu.pfnClientCallout(pfnCb, pvCb);
+        return true;
+    }
+    return false;
+}
+
+static void RENDER_APIENTRY
+renderspuChromiumParametervCR(GLenum target, GLenum type, GLsizei count,
+                                                            const GLvoid *values)
+{
+    int client_num;
+    unsigned short port;
+    CRMessage *msg, pingback;
+    unsigned char *privbuf = NULL;
+
+    switch (target) {
+        case GL_HH_SET_CLIENT_CALLOUT:
+            render_spu.pfnClientCallout = (PFNVCRSERVER_CLIENT_CALLOUT)values;
+            break;
+        case GL_GATHER_CONNECT_CR:
+            if (render_spu.gather_userbuf_size)
+                privbuf = (unsigned char *)crAlloc(1024*768*4);
+
+            port = ((GLint *) values)[0];
+
+            if (render_spu.gather_conns == NULL)
+                render_spu.gather_conns = crAlloc(render_spu.server->numClients*sizeof(CRConnection *));
+            else
+            {
+                crError("Oh bother! duplicate GL_GATHER_CONNECT_CR getting through");
+            }
+
+            for (client_num=0; client_num< render_spu.server->numClients; client_num++)
+            {
+                switch (render_spu.server->clients[client_num]->conn->type)
+                {
+                    default:
+                        crError("Render SPU: Unknown Network Type to Open Gather Connection");
+                }
+
+
+                if (render_spu.gather_userbuf_size)
+                {
+                    render_spu.gather_conns[client_num]->userbuf = privbuf;
+                    render_spu.gather_conns[client_num]->userbuf_len = render_spu.gather_userbuf_size;
+                }
+                else
+                {
+                    render_spu.gather_conns[client_num]->userbuf = NULL;
+                    render_spu.gather_conns[client_num]->userbuf_len = 0;
+                }
+
+                if (render_spu.gather_conns[client_num])
+                {
+                    crDebug("Render SPU: success!");
+                }
+            }
+
+            break;
+
+    case GL_GATHER_DRAWPIXELS_CR:
+        pingback.header.type = CR_MESSAGE_OOB;
+
+        for (client_num=0; client_num< render_spu.server->numClients; client_num++)
+        {
+            crNetGetMessage(render_spu.gather_conns[client_num], &msg);
+            if (msg->header.type == CR_MESSAGE_GATHER)
+            {
+                crNetFree(render_spu.gather_conns[client_num], msg);
+            }
+            else
+            {
+                crError("Render SPU: expecting MESSAGE_GATHER. got crap! (%d of %d)",
+                                client_num, render_spu.server->numClients-1);
+            }
+        }
+
+        /*
+         * We're only hitting the case if we're not actually calling
+         * child.SwapBuffers from readback, so a switch about which
+         * call to DoSync() we really want [this one, or the one
+         * in SwapBuffers above] is not necessary -- karl
+         */
+        for (client_num=0; client_num< render_spu.server->numClients; client_num++)
+            crNetSend(render_spu.gather_conns[client_num], NULL, &pingback,
+                                        sizeof(CRMessageHeader));
+
+        render_spu.self.RasterPos2i(((GLint *)values)[0], ((GLint *)values)[1]);
+        render_spu.self.DrawPixels(  ((GLint *)values)[2], ((GLint *)values)[3],
+                                        ((GLint *)values)[4], ((GLint *)values)[5],
+                                    render_spu.gather_conns[0]->userbuf);
+
+
+        render_spu.self.SwapBuffers(((GLint *)values)[6], 0);
+        break;
+
+    case GL_CURSOR_POSITION_CR:
+        if (type == GL_INT && count == 2) {
+            render_spu.cursorX = ((GLint *) values)[0];
+            render_spu.cursorY = ((GLint *) values)[1];
+            crDebug("Render SPU: GL_CURSOR_POSITION_CR (%d, %d)", render_spu.cursorX, render_spu.cursorY);
+        }
+        else {
+            crWarning("Render SPU: Bad type or count for ChromiumParametervCR(GL_CURSOR_POSITION_CR)");
+        }
+        break;
+
+    case GL_WINDOW_SIZE_CR:
+        /* XXX this is old code that should be removed.
+         * NOTE: we can only resize the default (id=CR_RENDER_DEFAULT_WINDOW_ID) window!!!
+         */
+        {
+            GLint w, h;
+            WindowInfo *window;
+            CRASSERT(type == GL_INT);
+            CRASSERT(count == 2);
+            CRASSERT(values);
+            w = ((GLint*)values)[0];
+            h = ((GLint*)values)[1];
+            window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, CR_RENDER_DEFAULT_WINDOW_ID);
+            if (window)
+            {
+                renderspu_SystemWindowSize(window, w, h);
+            }
+        }
+        break;
+
+    case GL_HH_SET_TMPCTX_MAKE_CURRENT:
+    	if (type == GL_BYTE && count == sizeof (void*))
+    		memcpy(&render_spu.blitterDispatch.MakeCurrent, values, count);
+    	else
+    		WARN(("unexpected type(%#x) - count(%d) pair", type, count));
+    	break;
+
+    default:
+#if 0
+        WARN(("Unhandled target in renderspuChromiumParametervCR(0x%x)", (int) target));
+#endif
+        break;
+    }
+}
+
+
+static void RENDER_APIENTRY
+renderspuGetChromiumParametervCR(GLenum target, GLuint index, GLenum type,
+                                                                 GLsizei count, GLvoid *values)
+{
+    switch (target) {
+    case GL_WINDOW_SIZE_CR:
+        {
+            GLint x, y, w, h, *size = (GLint *) values;
+            WindowInfo *window;
+            CRASSERT(type == GL_INT);
+            CRASSERT(count == 2);
+            CRASSERT(values);
+            size[0] = size[1] = 0;  /* default */
+            window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, index);
+            if (window)
+            {
+                renderspu_SystemGetWindowGeometry(window, &x, &y, &w, &h);
+                size[0] = w;
+                size[1] = h;
+            }
+        }
+        break;
+    case GL_WINDOW_POSITION_CR:
+        /* return window position, as a screen coordinate */
+        {
+            GLint *pos = (GLint *) values;
+            GLint x, y, w, h;
+            WindowInfo *window;
+            CRASSERT(type == GL_INT);
+            CRASSERT(count == 2);
+            CRASSERT(values);
+            pos[0] = pos[1] = 0;  /* default */
+            window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, index);
+            if (window)
+            {
+                renderspu_SystemGetWindowGeometry(window, &x, &y, &w, &h);
+                pos[0] = x;/*window->x;*/
+                pos[1] = y;/*window->y;*/
+            }
+        }
+        break;
+    case GL_MAX_WINDOW_SIZE_CR:
+        {
+            GLint *maxSize = (GLint *) values;
+            WindowInfo *window;
+            CRASSERT(type == GL_INT);
+            CRASSERT(count == 2);
+            CRASSERT(values);
+            window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, index);
+            if (window)
+            {
+                renderspu_SystemGetMaxWindowSize(window, maxSize + 0, maxSize + 1);
+            }
+        }
+        break;
+    case GL_WINDOW_VISIBILITY_CR:
+        {
+            GLint *vis = (GLint *) values;
+            WindowInfo *window;
+            CRASSERT(type == GL_INT);
+            CRASSERT(count == 1);
+            CRASSERT(values);
+            vis[0] = 0;  /* default */
+            window = (WindowInfo *) crHashtableSearch(render_spu.windowTable, index);
+            if (window)
+            {
+                vis[0] = window->visible;
+            }
+        }
+        break;
+    default:
+        ; /* nothing - silence compiler */
+    }
+}
+
+
+static void RENDER_APIENTRY
+renderspuBoundsInfoCR( CRrecti *bounds, GLbyte *payload, GLint len,
+                                             GLint num_opcodes )
+{
+    (void) bounds;
+    (void) payload;
+    (void) len;
+    (void) num_opcodes;
+    /* draw the bounding box */
+    if (render_spu.draw_bbox) {
+        GET_CONTEXT(context);
+        WindowInfo *window = context->currentWindow;
+        GLint x, y, w, h;
+
+        renderspu_SystemGetWindowGeometry(window, &x, &y, &w, &h);
+
+        render_spu.self.PushMatrix();
+        render_spu.self.LoadIdentity();
+        render_spu.self.MatrixMode(GL_PROJECTION);
+        render_spu.self.PushMatrix();
+        render_spu.self.LoadIdentity();
+        render_spu.self.Ortho(0, w, 0, h, -1, 1);
+        render_spu.self.Color3f(1, 1, 1);
+        render_spu.self.Begin(GL_LINE_LOOP);
+        render_spu.self.Vertex2i(bounds->x1, bounds->y1);
+        render_spu.self.Vertex2i(bounds->x2, bounds->y1);
+        render_spu.self.Vertex2i(bounds->x2, bounds->y2);
+        render_spu.self.Vertex2i(bounds->x1, bounds->y2);
+        render_spu.self.End();
+        render_spu.self.PopMatrix();
+        render_spu.self.MatrixMode(GL_MODELVIEW);
+        render_spu.self.PopMatrix();
+    }
+}
+
+
+static void RENDER_APIENTRY
+renderspuWriteback( GLint *writeback )
+{
+    (void) writeback;
+}
+
+
+static void
+remove_trailing_space(char *s)
+{
+    int k = crStrlen(s);
+    while (k > 0 && s[k-1] == ' ')
+        k--;
+    s[k] = 0;
+}
+
+static const GLubyte * RENDER_APIENTRY
+renderspuGetString(GLenum pname)
+{
+    static char tempStr[1000];
+    GET_CONTEXT(context);
+
+    if (pname == GL_EXTENSIONS)
+    {
+        const char *nativeExt;
+        char *crExt, *s1, *s2;
+
+        if (!render_spu.ws.glGetString)
+            return NULL;
+
+        nativeExt = (const char *) render_spu.ws.glGetString(GL_EXTENSIONS);
+        if (!nativeExt) {
+            /* maybe called w/out current context. */
+            return NULL;
+        }
+
+        if (!context)
+            return (const GLubyte *)nativeExt;
+
+        crExt = crStrjoin3(crExtensions, " ", crAppOnlyExtensions);
+        s1 = crStrIntersect(nativeExt, crExt);
+        remove_trailing_space(s1);
+        s2 = crStrjoin3(s1, " ", crChromiumExtensions);
+        remove_trailing_space(s2);
+        crFree(crExt);
+        crFree(s1);
+        if (context->extensionString)
+            crFree(context->extensionString);
+        context->extensionString = s2;
+        return (const GLubyte *) s2;
+    }
+    else if (pname == GL_VENDOR)
+        return (const GLubyte *) CR_VENDOR;
+    else if (pname == GL_VERSION)
+        return render_spu.ws.glGetString(GL_VERSION);
+    else if (pname == GL_RENDERER) {
+#ifdef VBOX
+        snprintf(tempStr, sizeof(tempStr), "Chromium (%s)", (char *) render_spu.ws.glGetString(GL_RENDERER));
+#else
+        sprintf(tempStr, "Chromium (%s)", (char *) render_spu.ws.glGetString(GL_RENDERER));
+#endif
+        return (const GLubyte *) tempStr;
+    }
+#ifdef CR_OPENGL_VERSION_2_0
+    else if (pname == GL_SHADING_LANGUAGE_VERSION)
+        return render_spu.ws.glGetString(GL_SHADING_LANGUAGE_VERSION);
+#endif
+#ifdef GL_CR_real_vendor_strings
+    else if (pname == GL_REAL_VENDOR)
+        return render_spu.ws.glGetString(GL_VENDOR);
+    else if (pname == GL_REAL_VERSION)
+        return render_spu.ws.glGetString(GL_VERSION);
+    else if (pname == GL_REAL_RENDERER)
+        return render_spu.ws.glGetString(GL_RENDERER);
+    else if (pname == GL_REAL_EXTENSIONS)
+        return render_spu.ws.glGetString(GL_EXTENSIONS);
+#endif
+    else
+        return NULL;
+}
+
+static void renderspuReparentWindowCB(unsigned long key, void *data1, void *data2)
+{
+    WindowInfo *pWindow = (WindowInfo *)data1;
+    RT_NOREF(key, data2);
+
+    renderspu_SystemReparentWindow(pWindow);
+}
+
+DECLEXPORT(void) renderspuReparentWindow(GLint window)
+{
+    WindowInfo *pWindow;
+    CRASSERT(window >= 0);
+
+    pWindow = (WindowInfo *) crHashtableSearch(render_spu.windowTable, window);
+
+    if (!pWindow)
+    {
+        crDebug("Render SPU: Attempt to reparent invalid window (%d)", window);
+        return;
+    }
+
+    renderspu_SystemReparentWindow(pWindow);
+
+    /* special case: reparent all internal windows as well */
+    if (window == CR_RENDER_DEFAULT_WINDOW_ID)
+    {
+        crHashtableWalk(render_spu.dummyWindowTable, renderspuReparentWindowCB, NULL);
+    }
+}
+
+DECLEXPORT(void) renderspuSetUnscaledHiDPI(bool fEnable)
+{
+    render_spu.fUnscaledHiDPI = fEnable;
+}
+
+#define FILLIN( NAME, FUNC ) \
+  table[i].name = crStrdup(NAME); \
+  table[i].fn = (SPUGenericFunction) FUNC; \
+  i++;
+
+
+/* These are the functions which the render SPU implements, not OpenGL.
+ */
+int
+renderspuCreateFunctions(SPUNamedFunctionTable table[])
+{
+    int i = 0;
+    FILLIN( "SwapBuffers", renderspuSwapBuffers );
+    FILLIN( "CreateContext", renderspuCreateContext );
+    FILLIN( "DestroyContext", renderspuDestroyContext );
+    FILLIN( "MakeCurrent", renderspuMakeCurrent );
+    FILLIN( "WindowCreate", renderspuWindowCreate );
+    FILLIN( "WindowDestroy", renderspuWindowDestroy );
+    FILLIN( "WindowSize", renderspuWindowSize );
+    FILLIN( "WindowPosition", renderspuWindowPosition );
+    FILLIN( "WindowVisibleRegion", renderspuWindowVisibleRegion );
+    FILLIN( "WindowShow", renderspuWindowShow );
+    FILLIN( "BarrierCreateCR", renderspuBarrierCreateCR );
+    FILLIN( "BarrierDestroyCR", renderspuBarrierDestroyCR );
+    FILLIN( "BarrierExecCR", renderspuBarrierExecCR );
+    FILLIN( "BoundsInfoCR", renderspuBoundsInfoCR );
+    FILLIN( "SemaphoreCreateCR", renderspuSemaphoreCreateCR );
+    FILLIN( "SemaphoreDestroyCR", renderspuSemaphoreDestroyCR );
+    FILLIN( "SemaphorePCR", renderspuSemaphorePCR );
+    FILLIN( "SemaphoreVCR", renderspuSemaphoreVCR );
+    FILLIN( "Writeback", renderspuWriteback );
+    FILLIN( "ChromiumParameteriCR", renderspuChromiumParameteriCR );
+    FILLIN( "ChromiumParameterfCR", renderspuChromiumParameterfCR );
+    FILLIN( "ChromiumParametervCR", renderspuChromiumParametervCR );
+    FILLIN( "GetChromiumParametervCR", renderspuGetChromiumParametervCR );
+    FILLIN( "GetString", renderspuGetString );
+    FILLIN( "VBoxPresentComposition", renderspuVBoxPresentComposition );
+    return i;
+}
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.h
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.h	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.h	(revision 86648)
@@ -0,0 +1,420 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved.
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#ifndef CR_RENDERSPU_H
+#define CR_RENDERSPU_H
+
+#ifdef WINDOWS
+#define WIN32_LEAN_AND_MEAN
+#include <iprt/win/windows.h>
+#define RENDER_APIENTRY __stdcall
+#define snprintf _snprintf
+#elif defined(DARWIN)
+# include "renderspu_cocoa_helper.h"
+#define RENDER_APIENTRY
+#else
+#include <GL/glx.h>
+#define RENDER_APIENTRY
+#endif
+#include "cr_threads.h"
+#include "cr_spu.h"
+#include "cr_hash.h"
+#include "cr_server.h"
+#include "cr_blitter.h"
+#include "cr_compositor.h"
+
+#include <iprt/cdefs.h>
+#include <iprt/critsect.h>
+#if defined(GLX) /* @todo: unify windows and glx thread creation code */
+#include <iprt/thread.h>
+#include <iprt/semaphore.h>
+
+/* special window id used for representing the command window CRWindowInfo */
+#define CR_RENDER_WINCMD_ID (INT32_MAX-2)
+AssertCompile(CR_RENDER_WINCMD_ID != CR_RENDER_DEFAULT_WINDOW_ID);
+/* CRHashTable is using unsigned long keys, we use it to trore X Window -> CRWindowInfo association */
+AssertCompile(sizeof (Window) == sizeof (unsigned long));
+#endif
+
+
+#define MAX_VISUALS 32
+
+/**
+ * Visual info
+ */
+typedef struct {
+    GLbitfield visAttribs;
+    const char *displayName;
+#if defined(WINDOWS)
+//    HDC device_context;
+#elif defined(DARWIN)
+#elif defined(GLX)
+    Display *dpy;
+    XVisualInfo *visual;
+#ifdef GLX_VERSION_1_3
+    GLXFBConfig fbconfig;
+#endif /* GLX_VERSION_1_3 */
+#endif
+} VisualInfo;
+
+/**
+ * Window info
+ */
+typedef struct WindowInfo {
+    int x, y;
+//    int width, height;
+//    int id; /**< integer window ID */
+    CR_BLITTER_WINDOW BltInfo;
+
+    VisualInfo *visual;
+
+    volatile uint32_t cRefs;
+
+    GLboolean mapPending;
+    GLboolean visible;
+    GLboolean everCurrent; /**< has this window ever been bound? */
+    char *title;
+
+    const VBOXVR_SCR_COMPOSITOR *pCompositor;
+    /* the composotor lock is used to synchronize the current compositor access,
+     * i.e. the compositor can be accessed by a gui refraw thread,
+     * while chromium thread might try to set a new compositor
+     * note that the compositor internally has its own lock to be used for accessing its data
+     * see CrVrScrCompositorLock/Unlock; renderspu and crserverlib would use it for compositor data access */
+    RTCRITSECT CompositorLock;
+    PCR_BLITTER pBlitter;
+#if defined(WINDOWS)
+    HDC nativeWindow; /**< for render_to_app_window */
+    HWND hWnd;
+    HDC device_context;
+    HDC redraw_device_context;
+    HRGN hRgn;
+#elif defined(DARWIN)
+    NativeNSViewRef window;
+    NativeNSViewRef nativeWindow; /**< for render_to_app_window */
+    NativeNSOpenGLContextRef *currentCtx;
+#elif defined(GLX)
+    Window window;
+    Window nativeWindow;  /**< for render_to_app_window */
+    Window appWindow;     /**< Same as nativeWindow but for garbage collections purposes */
+#endif
+    int nvSwapGroup;
+
+} WindowInfo;
+
+/**
+ * Context Info
+ */
+typedef struct _ContextInfo {
+//    int id; /**< integer context ID */
+    CR_BLITTER_CONTEXT BltInfo;
+    VisualInfo *visual;
+    GLboolean everCurrent;
+    GLboolean haveWindowPosARB;
+    WindowInfo *currentWindow;
+#if defined(WINDOWS)
+    HGLRC hRC;
+#elif defined(DARWIN)
+    NativeNSOpenGLContextRef context;
+#elif defined(GLX)
+    GLXContext context;
+#endif
+    struct _ContextInfo *shared;
+    char *extensionString;
+    volatile uint32_t cRefs;
+} ContextInfo;
+
+/**
+ * Barrier info
+ */
+typedef struct {
+    CRbarrier barrier;
+    GLuint count;
+} Barrier;
+
+#ifdef GLX
+typedef enum
+{
+	CR_RENDER_WINCMD_TYPE_UNDEFINED = 0,
+	/* create the window (not used for now) */
+	CR_RENDER_WINCMD_TYPE_WIN_CREATE,
+	/* destroy the window (not used for now) */
+	CR_RENDER_WINCMD_TYPE_WIN_DESTROY,
+        /* notify the WinCmd thread about window creation */
+        CR_RENDER_WINCMD_TYPE_WIN_ON_CREATE,
+        /* notify the WinCmd thread about window destroy */
+        CR_RENDER_WINCMD_TYPE_WIN_ON_DESTROY,
+        /* nop used to synchronize with the WinCmd thread */
+        CR_RENDER_WINCMD_TYPE_NOP,
+	/* exit Win Cmd thread */
+	CR_RENDER_WINCMD_TYPE_EXIT,
+} CR_RENDER_WINCMD_TYPE;
+
+typedef struct CR_RENDER_WINCMD
+{
+    /* command type */
+	CR_RENDER_WINCMD_TYPE enmCmd;
+	/* command result */
+	int rc;
+	/* valid for WIN_CREATE & WIN_DESTROY only */
+	WindowInfo *pWindow;
+} CR_RENDER_WINCMD, *PCR_RENDER_WINCMD;
+#endif
+
+#ifdef RT_OS_DARWIN
+typedef void (*PFNDELETE_OBJECT)(GLhandleARB obj);
+typedef void (*PFNGET_ATTACHED_OBJECTS)( GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj );
+typedef GLhandleARB (*PFNGET_HANDLE)(GLenum pname);
+typedef void (*PFNGET_INFO_LOG)( GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog );
+typedef void (*PFNGET_OBJECT_PARAMETERFV)( GLhandleARB obj, GLenum pname, GLfloat * params );
+typedef void (*PFNGET_OBJECT_PARAMETERIV)( GLhandleARB obj, GLenum pname, GLint * params );
+#endif
+
+typedef DECLCALLBACKPTR(void, PFNVCRSERVER_CLIENT_CALLOUT_CB)(void *pvCb);
+typedef DECLCALLBACKPTR(void, PFNVCRSERVER_CLIENT_CALLOUT)(PFNVCRSERVER_CLIENT_CALLOUT_CB pfnCb, void*pvCb);
+
+
+/**
+ * Renderspu state info
+ */
+typedef struct {
+    SPUDispatchTable self;
+    int id;
+
+    /** config options */
+    /*@{*/
+    char *window_title;
+    int defaultX, defaultY;
+    unsigned int defaultWidth, defaultHeight;
+    int default_visual;
+    int use_L2;
+    int fullscreen, ontop;
+    char display_string[100];
+#if defined(GLX)
+    int try_direct;
+    int force_direct;
+    int sync;
+#endif
+    int force_present_main_thread;
+    int render_to_app_window;
+    int render_to_crut_window;
+    int crut_drawable;
+    int resizable;
+    int use_lut8, lut8[3][256];
+    int borderless;
+    int nvSwapGroup;
+    int ignore_papi;
+    int ignore_window_moves;
+    int pbufferWidth, pbufferHeight;
+    int use_glxchoosevisual;
+    int draw_bbox;
+    /*@}*/
+
+    CRServer *server;
+    int gather_port;
+    int gather_userbuf_size;
+    CRConnection **gather_conns;
+
+    GLint drawCursor;
+    GLint cursorX, cursorY;
+
+    int numVisuals;
+    VisualInfo visuals[MAX_VISUALS];
+
+    CRHashTable *windowTable;
+    CRHashTable *contextTable;
+
+    CRHashTable *dummyWindowTable;
+
+    ContextInfo *defaultSharedContext;
+
+    crOpenGLInterface ws;  /**< Window System interface */
+
+    CRHashTable *barrierHash;
+
+    int num_swap_clients;
+    CRConnection **swap_conns;
+
+    SPUDispatchTable blitterDispatch;
+    CRHashTable *blitterTable;
+
+    PFNVCRSERVER_CLIENT_CALLOUT pfnClientCallout;
+
+#if defined(GLX)
+    RTTHREAD hWinCmdThread;
+    VisualInfo WinCmdVisual;
+    WindowInfo WinCmdWindow;
+    RTSEMEVENT hWinCmdCompleteEvent;
+    /* display connection used to send data to the WinCmd thread */
+    Display *pCommunicationDisplay;
+    Atom WinCmdAtom;
+    /* X Window -> CRWindowInfo table */
+    CRHashTable *pWinToInfoTable;
+#endif
+
+#ifdef RT_OS_WINDOWS
+    DWORD dwWinThreadId;
+    HANDLE hWinThreadReadyEvent;
+#endif
+
+#ifdef RT_OS_DARWIN
+    PFNDELETE_OBJECT pfnDeleteObject;
+    PFNGET_ATTACHED_OBJECTS pfnGetAttachedObjects;
+    PFNGET_HANDLE pfnGetHandle;
+    PFNGET_INFO_LOG pfnGetInfoLog;
+    PFNGET_OBJECT_PARAMETERFV pfnGetObjectParameterfv;
+    PFNGET_OBJECT_PARAMETERIV pfnGetObjectParameteriv;
+
+    CR_GLSL_CACHE GlobalShaders;
+#endif /* RT_OS_DARWIN */
+    /* If TRUE, render should tell window server to prevent artificial content
+     * up-scaling when displayed on HiDPI monitor. */
+    bool fUnscaledHiDPI;
+} RenderSPU;
+
+#ifdef RT_OS_WINDOWS
+
+/* Asks window thread to create new window.
+   msg.lParam - holds pointer to CREATESTRUCT structure
+                note that lpCreateParams is used to specify address to store handle of created window
+   msg.wParam - unused, should be NULL
+*/
+#define WM_VBOX_RENDERSPU_CREATE_WINDOW (WM_APP+1)
+
+typedef struct _VBOX_RENDERSPU_DESTROY_WINDOW {
+    HWND hWnd; /* handle to window to destroy */
+} VBOX_RENDERSPU_DESTROY_WINDOW;
+
+/* Asks window thread to destroy previously created window.
+   msg.lParam - holds pointer to RENDERSPU_VBOX_WINDOW_DESTROY structure
+   msg.wParam - unused, should be NULL
+*/
+#define WM_VBOX_RENDERSPU_DESTROY_WINDOW (WM_APP+2)
+
+#endif
+
+extern RenderSPU render_spu;
+
+/* @todo remove this hack */
+extern uint64_t render_spu_parent_window_id;
+
+extern CRtsd _RenderTSD;
+#define GET_CONTEXT_VAL() ((ContextInfo *) crGetTSD(&_RenderTSD))
+#define SET_CONTEXT_VAL(_v) do { \
+        crSetTSD(&_RenderTSD, (_v)); \
+    } while (0)
+
+#define GET_CONTEXT(T)  ContextInfo *T = GET_CONTEXT_VAL()
+
+
+extern void renderspuSetDefaultSharedContext(ContextInfo *pCtx);
+extern void renderspuSetVBoxConfiguration( RenderSPU *spu );
+extern void renderspuMakeVisString( GLbitfield visAttribs, char *s );
+extern VisualInfo *renderspuFindVisual(const char *displayName, GLbitfield visAttribs );
+extern GLboolean renderspu_SystemInitVisual( VisualInfo *visual );
+extern GLboolean renderspu_SystemCreateContext( VisualInfo *visual, ContextInfo *context, ContextInfo *sharedContext );
+extern void renderspu_SystemDestroyContext( ContextInfo *context );
+extern GLboolean renderspu_SystemCreateWindow( VisualInfo *visual, GLboolean showIt, WindowInfo *window );
+extern GLboolean renderspu_SystemVBoxCreateWindow( VisualInfo *visual, GLboolean showIt, WindowInfo *window );
+extern void renderspu_SystemDestroyWindow( WindowInfo *window );
+extern void renderspu_SystemWindowSize( WindowInfo *window, GLint w, GLint h );
+extern void renderspu_SystemGetWindowGeometry( WindowInfo *window, GLint *x, GLint *y, GLint *w, GLint *h );
+extern void renderspu_SystemGetMaxWindowSize( WindowInfo *window, GLint *w, GLint *h );
+extern void renderspu_SystemWindowPosition( WindowInfo *window, GLint x, GLint y );
+extern void renderspu_SystemWindowVisibleRegion(WindowInfo *window, GLint cRects, const GLint* pRects);
+extern GLboolean renderspu_SystemWindowNeedEmptyPresent(WindowInfo *window);
+extern int renderspu_SystemInit(void);
+extern int renderspu_SystemTerm(void);
+extern void renderspu_SystemDefaultSharedContextChanged(ContextInfo *fromContext, ContextInfo *toContext);
+extern void renderspu_SystemShowWindow( WindowInfo *window, GLboolean showIt );
+extern void renderspu_SystemMakeCurrent( WindowInfo *window, GLint windowInfor, ContextInfo *context );
+extern void renderspu_SystemSwapBuffers( WindowInfo *window, GLint flags );
+extern void renderspu_SystemReparentWindow(WindowInfo *window);
+extern void renderspu_SystemVBoxPresentComposition( WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR_ENTRY *pChangedEntry );
+uint32_t renderspu_SystemPostprocessFunctions(SPUNamedFunctionTable *aFunctions, uint32_t cFunctions, uint32_t cTable);
+extern void renderspu_GCWindow(void);
+extern int renderspuCreateFunctions( SPUNamedFunctionTable table[] );
+extern GLboolean renderspuVBoxCompositorSet( WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR * pCompositor);
+extern void renderspuVBoxCompositorClearAll(void);
+extern int renderspuVBoxCompositorLock(WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR **ppCompositor);
+extern int renderspuVBoxCompositorUnlock(WindowInfo *window);
+extern const struct VBOXVR_SCR_COMPOSITOR * renderspuVBoxCompositorAcquire( WindowInfo *window);
+extern int renderspuVBoxCompositorTryAcquire(WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR **ppCompositor);
+extern void renderspuVBoxCompositorRelease( WindowInfo *window);
+extern void renderspuVBoxPresentCompositionGeneric( WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR * pCompositor,
+        const struct VBOXVR_SCR_COMPOSITOR_ENTRY *pChangedEntry, int32_t i32MakeCurrentUserData,
+        bool fRedraw);
+extern PCR_BLITTER renderspuVBoxPresentBlitterGet( WindowInfo *window );
+void renderspuVBoxPresentBlitterCleanup( WindowInfo *window );
+extern int renderspuVBoxPresentBlitterEnter( PCR_BLITTER pBlitter, int32_t i32MakeCurrentUserData );
+extern PCR_BLITTER renderspuVBoxPresentBlitterGetAndEnter( WindowInfo *window, int32_t i32MakeCurrentUserData, bool fRedraw );
+extern PCR_BLITTER renderspuVBoxPresentBlitterEnsureCreated( WindowInfo *window, int32_t i32MakeCurrentUserData );
+WindowInfo* renderspuWinCreate(GLint visBits, GLint id);
+void renderspuWinTermOnShutdown(WindowInfo *window);
+void renderspuWinTerm( WindowInfo *window );
+void renderspuWinCleanup(WindowInfo *window);
+void renderspuWinDestroy(WindowInfo *window);
+GLboolean renderspuWinInitWithVisual( WindowInfo *window, VisualInfo *visual, GLboolean showIt, GLint id );
+GLboolean renderspuWinInit(WindowInfo *pWindow, const char *dpyName, GLint visBits, GLint id);
+
+DECLINLINE(void) renderspuWinRetain(WindowInfo *window)
+{
+    ASMAtomicIncU32(&window->cRefs);
+}
+
+DECLINLINE(bool) renderspuWinIsTermed(WindowInfo *window)
+{
+    return window->BltInfo.Base.id < 0;
+}
+
+DECLINLINE(void) renderspuWinRelease(WindowInfo *window)
+{
+    uint32_t cRefs = ASMAtomicDecU32(&window->cRefs);
+    if (!cRefs)
+    {
+        renderspuWinDestroy(window);
+    }
+}
+
+extern WindowInfo* renderspuGetDummyWindow(GLint visBits);
+extern void renderspuPerformMakeCurrent(WindowInfo *window, GLint nativeWindow, ContextInfo *context);
+extern GLboolean renderspuInitVisual(VisualInfo *pVisInfo, const char *displayName, GLbitfield visAttribs);
+extern void renderspuVBoxCompositorBlit ( const struct VBOXVR_SCR_COMPOSITOR * pCompositor, PCR_BLITTER pBlitter);
+extern void renderspuVBoxCompositorBlitStretched ( const struct VBOXVR_SCR_COMPOSITOR * pCompositor, PCR_BLITTER pBlitter, GLfloat scaleX, GLfloat scaleY);
+extern GLint renderspuCreateContextEx(const char *dpyName, GLint visBits, GLint id, GLint shareCtx);
+extern GLint renderspuWindowCreateEx( const char *dpyName, GLint visBits, GLint id );
+
+extern GLint RENDER_APIENTRY renderspuWindowCreate( const char *dpyName, GLint visBits );
+void RENDER_APIENTRY renderspuWindowDestroy( GLint win );
+extern GLint RENDER_APIENTRY renderspuCreateContext( const char *dpyname, GLint visBits, GLint shareCtx );
+extern void RENDER_APIENTRY renderspuMakeCurrent(GLint crWindow, GLint nativeWindow, GLint ctx);
+extern void RENDER_APIENTRY renderspuSwapBuffers( GLint window, GLint flags );
+
+extern uint32_t renderspuContextMarkDeletedAndRelease( ContextInfo *context );
+
+int renderspuDefaultCtxInit(void);
+void renderspuCleanupBase(bool fDeleteTables);
+
+ContextInfo * renderspuDefaultSharedContextAcquire(void);
+void renderspuDefaultSharedContextRelease(ContextInfo * pCtx);
+uint32_t renderspuContextRelease(ContextInfo *context);
+uint32_t renderspuContextRetain(ContextInfo *context);
+
+bool renderspuCalloutAvailable(void);
+bool renderspuCalloutClient(PFNVCRSERVER_CLIENT_CALLOUT_CB pfnCb, void *pvCb);
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+DECLHIDDEN(void) renderspuSetWindowId(uint64_t winId);
+DECLEXPORT(void) renderspuReparentWindow(GLint window);
+DECLEXPORT(void) renderspuSetUnscaledHiDPI(bool fEnable);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CR_RENDERSPU_H */
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c	(revision 86648)
@@ -0,0 +1,479 @@
+/* $Id$ */
+/** @file
+ * VirtualBox OpenGL Cocoa Window System implementation
+ */
+
+/*
+ * Copyright (C) 2009-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include <OpenGL/OpenGL.h>
+
+#include "renderspu.h"
+#include <iprt/process.h>
+#include <iprt/string.h>
+#include <iprt/path.h>
+
+#include <cr_string.h>
+#include <cr_mem.h>
+
+GLboolean renderspu_SystemInitVisual(VisualInfo *pVisInfo)
+{
+    CRASSERT(pVisInfo);
+
+/*    cocoaGLVisualCreate(&pCtxInfo->context);*/
+
+    return GL_TRUE;
+}
+
+GLboolean renderspu_SystemCreateContext(VisualInfo *pVisInfo, ContextInfo *pCtxInfo, ContextInfo *pSharedCtxInfo)
+{
+    CRASSERT(pVisInfo);
+    CRASSERT(pCtxInfo);
+
+    pCtxInfo->currentWindow = NULL;
+
+    cocoaGLCtxCreate(&pCtxInfo->context, pVisInfo->visAttribs, pSharedCtxInfo ? pSharedCtxInfo->context : NULL);
+
+    return GL_TRUE;
+}
+
+void renderspu_SystemDestroyContext(ContextInfo *pCtxInfo)
+{
+    if(!pCtxInfo)
+        return;
+
+    if(pCtxInfo->context)
+    {
+        cocoaGLCtxDestroy(pCtxInfo->context);
+        pCtxInfo->context = NULL;
+    }
+}
+
+void renderspuFullscreen(WindowInfo *pWinInfo, GLboolean fFullscreen)
+{
+    /* Real fullscreen isn't supported by VirtualBox */
+}
+
+GLboolean renderspu_SystemVBoxCreateWindow(VisualInfo *pVisInfo, GLboolean fShowIt, WindowInfo *pWinInfo)
+{
+    CRASSERT(pVisInfo);
+    CRASSERT(pWinInfo);
+
+    /* VirtualBox is the only frontend which support 3D right now. */
+    char pszName[256];
+    if (RTProcGetExecutablePath(pszName, sizeof(pszName)))
+        /* Check for VirtualBox and VirtualBoxVM */
+        if (RTStrNICmp(RTPathFilename(pszName), "VirtualBox", 10) != 0)
+            return GL_FALSE;
+
+    pWinInfo->visual = pVisInfo;
+    pWinInfo->window = NULL;
+    pWinInfo->nativeWindow = NULL;
+    pWinInfo->currentCtx = NULL;
+
+    NativeNSViewRef pParentWin = (NativeNSViewRef)(uintptr_t)render_spu_parent_window_id;
+
+    cocoaViewCreate(&pWinInfo->window, pWinInfo, pParentWin, pVisInfo->visAttribs);
+
+    if (fShowIt)
+        renderspu_SystemShowWindow(pWinInfo, fShowIt);
+
+    return GL_TRUE;
+}
+
+void renderspu_SystemReparentWindow(WindowInfo *pWinInfo)
+{
+    NativeNSViewRef pParentWin = (NativeNSViewRef)(uintptr_t)render_spu_parent_window_id;
+    cocoaViewReparent(pWinInfo->window, pParentWin);
+}
+
+void renderspu_SystemDestroyWindow(WindowInfo *pWinInfo)
+{
+    CRASSERT(pWinInfo);
+
+    cocoaViewDestroy(pWinInfo->window);
+}
+
+void renderspu_SystemWindowPosition(WindowInfo *pWinInfo, GLint x, GLint y)
+{
+    CRASSERT(pWinInfo);
+    NativeNSViewRef pParentWin = (NativeNSViewRef)(uintptr_t)render_spu_parent_window_id;
+
+    /*pParentWin is unused in the call, otherwise it might hold incorrect value if for ex. last reparent call was for
+      a different screen*/
+    cocoaViewSetPosition(pWinInfo->window, pParentWin, x, y);
+}
+
+void renderspu_SystemWindowSize(WindowInfo *pWinInfo, GLint w, GLint h)
+{
+    CRASSERT(pWinInfo);
+
+    cocoaViewSetSize(pWinInfo->window, w, h);
+}
+
+void renderspu_SystemGetWindowGeometry(WindowInfo *pWinInfo, GLint *pX, GLint *pY, GLint *pW, GLint *pH)
+{
+    CRASSERT(pWinInfo);
+
+    cocoaViewGetGeometry(pWinInfo->window, pX, pY, pW, pH);
+}
+
+void renderspu_SystemGetMaxWindowSize(WindowInfo *pWinInfo, GLint *pW, GLint *pH)
+{
+    CRASSERT(pWinInfo);
+
+    *pW = 10000;
+    *pH = 10000;
+}
+
+void renderspu_SystemShowWindow(WindowInfo *pWinInfo, GLboolean fShowIt)
+{
+    CRASSERT(pWinInfo);
+
+    cocoaViewShow(pWinInfo->window, fShowIt);
+}
+
+void renderspu_SystemVBoxPresentComposition( WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR_ENTRY *pChangedEntry )
+{
+    cocoaViewPresentComposition(window->window, pChangedEntry);
+}
+
+void renderspu_SystemMakeCurrent(WindowInfo *pWinInfo, GLint nativeWindow, ContextInfo *pCtxInfo)
+{
+/*    if(pWinInfo->visual != pCtxInfo->visual)*/
+/*        printf ("visual mismatch .....................\n");*/
+
+    nativeWindow = 0;
+
+    if (pWinInfo && pCtxInfo)
+        cocoaViewMakeCurrentContext(pWinInfo->window, pCtxInfo->context);
+    else
+        cocoaViewMakeCurrentContext(NULL, NULL);
+}
+
+void renderspu_SystemSwapBuffers(WindowInfo *pWinInfo, GLint flags)
+{
+    CRASSERT(pWinInfo);
+
+    cocoaViewDisplay(pWinInfo->window);
+}
+
+GLboolean renderspu_SystemWindowNeedEmptyPresent(WindowInfo *pWinInfo)
+{
+    return cocoaViewNeedsEmptyPresent(pWinInfo->window);
+}
+
+void renderspu_SystemWindowVisibleRegion(WindowInfo *pWinInfo, GLint cRects, const GLint* paRects)
+{
+    CRASSERT(pWinInfo);
+
+    cocoaViewSetVisibleRegion(pWinInfo->window, cRects, paRects);
+}
+
+void renderspu_SystemWindowApplyVisibleRegion(WindowInfo *pWinInfo)
+{
+}
+
+int renderspu_SystemInit()
+{
+    return VINF_SUCCESS;
+}
+
+int renderspu_SystemTerm()
+{
+    CrGlslTerm(&render_spu.GlobalShaders);
+    return VINF_SUCCESS;
+}
+
+static SPUNamedFunctionTable * renderspuFindEntry(SPUNamedFunctionTable *aFunctions, const char *pcszName)
+{
+    SPUNamedFunctionTable *pCur;
+
+    for (pCur = aFunctions ; pCur->name != NULL ; pCur++)
+    {
+        if (!crStrcmp( pcszName, pCur->name ) )
+        {
+            return pCur;
+        }
+    }
+
+    AssertFailed();
+
+    return NULL;
+}
+
+typedef struct CR_RENDER_CTX_INFO
+{
+    ContextInfo * pContext;
+    WindowInfo * pWindow;
+} CR_RENDER_CTX_INFO;
+
+void renderspuCtxInfoInitCurrent(CR_RENDER_CTX_INFO *pInfo)
+{
+    GET_CONTEXT(pCurCtx);
+    pInfo->pContext = pCurCtx;
+    pInfo->pWindow = pCurCtx ? pCurCtx->currentWindow : NULL;
+}
+
+void renderspuCtxInfoRestoreCurrent(CR_RENDER_CTX_INFO *pInfo)
+{
+    GET_CONTEXT(pCurCtx);
+    if (pCurCtx == pInfo->pContext && (!pCurCtx || pCurCtx->currentWindow == pInfo->pWindow))
+        return;
+    renderspuPerformMakeCurrent(pInfo->pWindow, 0, pInfo->pContext);
+}
+
+GLboolean renderspuCtxSetCurrentWithAnyWindow(ContextInfo * pContext, CR_RENDER_CTX_INFO *pInfo)
+{
+    WindowInfo * window;
+    renderspuCtxInfoInitCurrent(pInfo);
+
+    if (pInfo->pContext == pContext)
+        return GL_TRUE;
+
+    window = pContext->currentWindow;
+    if (!window)
+    {
+        window = renderspuGetDummyWindow(pContext->BltInfo.Base.visualBits);
+        if (!window)
+        {
+            WARN(("renderspuGetDummyWindow failed"));
+            return GL_FALSE;
+        }
+    }
+
+    Assert(window);
+
+    renderspuPerformMakeCurrent(window, 0, pContext);
+    return GL_TRUE;
+}
+
+void renderspu_SystemDefaultSharedContextChanged(ContextInfo *fromContext, ContextInfo *toContext)
+{
+    CRASSERT(fromContext != toContext);
+
+    if (!CrGlslIsInited(&render_spu.GlobalShaders))
+    {
+        CrGlslInit(&render_spu.GlobalShaders, &render_spu.blitterDispatch);
+    }
+
+    if (fromContext)
+    {
+        if (CrGlslNeedsCleanup(&render_spu.GlobalShaders))
+        {
+            CR_RENDER_CTX_INFO Info;
+            if (renderspuCtxSetCurrentWithAnyWindow(fromContext, &Info))
+            {
+                CrGlslCleanup(&render_spu.GlobalShaders);
+                renderspuCtxInfoRestoreCurrent(&Info);
+            }
+            else
+                WARN(("renderspuCtxSetCurrentWithAnyWindow failed!"));
+        }
+    }
+    else
+    {
+        CRASSERT(!CrGlslNeedsCleanup(&render_spu.GlobalShaders));
+    }
+
+    CRASSERT(!CrGlslNeedsCleanup(&render_spu.GlobalShaders));
+
+    if (toContext)
+    {
+        CR_RENDER_CTX_INFO Info;
+        if (renderspuCtxSetCurrentWithAnyWindow(toContext, &Info))
+        {
+            int rc = CrGlslProgGenAllNoAlpha(&render_spu.GlobalShaders);
+            if (!RT_SUCCESS(rc))
+                WARN(("CrGlslProgGenAllNoAlpha failed, rc %d", rc));
+
+            renderspuCtxInfoRestoreCurrent(&Info);
+        }
+        else
+            crWarning("renderspuCtxSetCurrentWithAnyWindow failed!");
+    }
+}
+
+AssertCompile(sizeof (GLhandleARB) == sizeof (void*));
+
+static VBoxGLhandleARB crHndlSearchVBox(GLhandleARB hNative)
+{
+    CRASSERT(!(((uintptr_t)hNative) >> 32));
+    return (VBoxGLhandleARB)((uintptr_t)hNative);
+}
+
+static GLhandleARB crHndlSearchNative(VBoxGLhandleARB hVBox)
+{
+    return (GLhandleARB)((uintptr_t)hVBox);
+}
+
+static VBoxGLhandleARB crHndlAcquireVBox(GLhandleARB hNative)
+{
+    CRASSERT(!(((uintptr_t)hNative) >> 32));
+    return (VBoxGLhandleARB)((uintptr_t)hNative);
+}
+
+static GLhandleARB crHndlReleaseVBox(VBoxGLhandleARB hVBox)
+{
+    return (GLhandleARB)((uintptr_t)hVBox);
+}
+
+static void SPU_APIENTRY renderspu_SystemDeleteObjectARB(VBoxGLhandleARB obj)
+{
+    GLhandleARB hNative = crHndlReleaseVBox(obj);
+    if (!hNative)
+    {
+        crWarning("no native for %d", obj);
+        return;
+    }
+
+    render_spu.pfnDeleteObject(hNative);
+}
+
+static void SPU_APIENTRY renderspu_SystemGetAttachedObjectsARB( VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * pCount, VBoxGLhandleARB * obj )
+{
+    GLhandleARB *paAttachments;
+    GLhandleARB hNative = crHndlSearchNative(containerObj);
+    GLsizei count, i;
+
+    if (pCount)
+        *pCount = 0;
+
+    if (!hNative)
+    {
+        crWarning("no native for %d", obj);
+        return;
+    }
+
+    paAttachments = crCalloc(maxCount * sizeof (*paAttachments));
+    if (!paAttachments)
+    {
+        crWarning("crCalloc failed");
+        return;
+    }
+
+    render_spu.pfnGetAttachedObjects(hNative, maxCount, &count, paAttachments);
+    if (pCount)
+        *pCount = count;
+    if (count > maxCount)
+    {
+        crWarning("count too big");
+        count = maxCount;
+    }
+
+    for (i = 0; i < count; ++i)
+    {
+        obj[i] = crHndlSearchVBox(paAttachments[i]);
+        CRASSERT(obj[i]);
+    }
+
+    crFree(paAttachments);
+}
+
+static VBoxGLhandleARB SPU_APIENTRY renderspu_SystemGetHandleARB(GLenum pname)
+{
+    GLhandleARB hNative = render_spu.pfnGetHandle(pname);
+    VBoxGLhandleARB hVBox;
+    if (!hNative)
+    {
+        crWarning("pfnGetHandle failed");
+        return 0;
+    }
+    hVBox = crHndlAcquireVBox(hNative);
+    CRASSERT(hVBox);
+    return hVBox;
+}
+
+static void SPU_APIENTRY renderspu_SystemGetInfoLogARB( VBoxGLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog )
+{
+    GLhandleARB hNative = crHndlSearchNative(obj);
+    if (!hNative)
+    {
+        crWarning("invalid handle!");
+        return;
+    }
+
+    render_spu.pfnGetInfoLog(hNative, maxLength, length, infoLog);
+}
+
+static void SPU_APIENTRY renderspu_SystemGetObjectParameterfvARB( VBoxGLhandleARB obj, GLenum pname, GLfloat * params )
+{
+    GLhandleARB hNative = crHndlSearchNative(obj);
+    if (!hNative)
+    {
+        crWarning("invalid handle!");
+        return;
+    }
+
+    render_spu.pfnGetObjectParameterfv(hNative, pname, params);
+}
+
+static void SPU_APIENTRY renderspu_SystemGetObjectParameterivARB( VBoxGLhandleARB obj, GLenum pname, GLint * params )
+{
+    GLhandleARB hNative = crHndlSearchNative(obj);
+    if (!hNative)
+    {
+        crWarning("invalid handle!");
+        return;
+    }
+
+    render_spu.pfnGetObjectParameteriv(hNative, pname, params);
+}
+
+uint32_t renderspu_SystemPostprocessFunctions(SPUNamedFunctionTable *aFunctions, uint32_t cFunctions, uint32_t cTable)
+{
+    SPUNamedFunctionTable * pEntry;
+
+    pEntry = renderspuFindEntry(aFunctions, "DeleteObjectARB");
+    if (pEntry)
+    {
+        render_spu.pfnDeleteObject = (PFNDELETE_OBJECT)pEntry->fn;
+        pEntry->fn = (SPUGenericFunction)renderspu_SystemDeleteObjectARB;
+    }
+
+    pEntry = renderspuFindEntry(aFunctions, "GetAttachedObjectsARB");
+    if (pEntry)
+    {
+        render_spu.pfnGetAttachedObjects = (PFNGET_ATTACHED_OBJECTS)pEntry->fn;
+        pEntry->fn = (SPUGenericFunction)renderspu_SystemGetAttachedObjectsARB;
+    }
+
+    pEntry = renderspuFindEntry(aFunctions, "GetHandleARB");
+    if (pEntry)
+    {
+        render_spu.pfnGetHandle = (PFNGET_HANDLE)pEntry->fn;
+        pEntry->fn = (SPUGenericFunction)renderspu_SystemGetHandleARB;
+    }
+
+    pEntry = renderspuFindEntry(aFunctions, "GetInfoLogARB");
+    if (pEntry)
+    {
+        render_spu.pfnGetInfoLog = (PFNGET_INFO_LOG)pEntry->fn;
+        pEntry->fn = (SPUGenericFunction)renderspu_SystemGetInfoLogARB;
+    }
+
+    pEntry = renderspuFindEntry(aFunctions, "GetObjectParameterfvARB");
+    if (pEntry)
+    {
+        render_spu.pfnGetObjectParameterfv = (PFNGET_OBJECT_PARAMETERFV)pEntry->fn;
+        pEntry->fn = (SPUGenericFunction)renderspu_SystemGetObjectParameterfvARB;
+    }
+
+    pEntry = renderspuFindEntry(aFunctions, "GetObjectParameterivARB");
+    if (pEntry)
+    {
+        render_spu.pfnGetObjectParameteriv = (PFNGET_OBJECT_PARAMETERIV)pEntry->fn;
+        pEntry->fn = (SPUGenericFunction)renderspu_SystemGetObjectParameterivARB;
+    }
+
+    return cFunctions;
+}
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.h
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.h	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.h	(revision 86648)
@@ -0,0 +1,65 @@
+/* $Id$ */
+/** @file
+ * VirtualBox OpenGL Cocoa Window System Helper definition
+ */
+
+/*
+ * Copyright (C) 2009-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___renderspu_cocoa_helper_h
+#define ___renderspu_cocoa_helper_h
+
+#include <iprt/cdefs.h>
+#include <VBox/VBoxCocoa.h>
+#include <OpenGL/OpenGL.h>
+#ifdef IN_VMSVGA3D
+# include "../../../GuestHost/OpenGL/include/cr_vreg.h"
+# include "../../../GuestHost/OpenGL/include/cr_compositor.h"
+#else
+# include <cr_vreg.h>
+# include <cr_compositor.h>
+#endif
+
+
+RT_C_DECLS_BEGIN
+
+struct WindowInfo;
+
+ADD_COCOA_NATIVE_REF(NSView);
+ADD_COCOA_NATIVE_REF(NSOpenGLContext);
+
+/** @name OpenGL context management
+ * @{ */
+void cocoaGLCtxCreate(NativeNSOpenGLContextRef *ppCtx, GLbitfield fVisParams, NativeNSOpenGLContextRef pSharedCtx);
+void cocoaGLCtxDestroy(NativeNSOpenGLContextRef pCtx);
+/** @} */
+
+/** @name View management
+ * @{ */
+void cocoaViewCreate(NativeNSViewRef *ppView, struct WindowInfo *pWinInfo, NativeNSViewRef pParentView, GLbitfield fVisParams);
+void cocoaViewReparent(NativeNSViewRef pView, NativeNSViewRef pParentView);
+void cocoaViewDestroy(NativeNSViewRef pView);
+void cocoaViewDisplay(NativeNSViewRef pView);
+void cocoaViewShow(NativeNSViewRef pView, GLboolean fShowIt);
+void cocoaViewSetPosition(NativeNSViewRef pView, NativeNSViewRef pParentView, int x, int y);
+void cocoaViewSetSize(NativeNSViewRef pView, int cx, int cy);
+void cocoaViewGetGeometry(NativeNSViewRef pView, int *px, int *py, int *pcx, int *pcy);
+void cocoaViewMakeCurrentContext(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx);
+void cocoaViewSetVisibleRegion(NativeNSViewRef pView, GLint cRects, const GLint *paRects);
+GLboolean cocoaViewNeedsEmptyPresent(NativeNSViewRef pView);
+void cocoaViewPresentComposition(NativeNSViewRef pView, const struct VBOXVR_SCR_COMPOSITOR_ENTRY *pChangedEntry);
+/** @} */
+
+RT_C_DECLS_END
+
+#endif /* !___renderspu_cocoa_helper_h */
+
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.m
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.m	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.m	(revision 86648)
@@ -0,0 +1,3283 @@
+/* $Id$ */
+/** @file
+ * VirtualBox OpenGL Cocoa Window System Helper Implementation.
+ *
+ * This source file is shared between the SharedOpenGL HGCM service and the
+ * SVGA3d emulation.
+ */
+
+/*
+ * Copyright (C) 2009-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/** @page pg_opengl_cocoa  OpenGL - Cocoa Window System Helper
+ *
+ * How this works:
+ * In general it is not so easy like on the other platforms, cause Cocoa
+ * doesn't support any clipping of already painted stuff. In Mac OS X there is
+ * the concept of translucent canvas's e.g. windows and there it is just
+ * painted what should be visible to the user. Unfortunately this isn't the
+ * concept of chromium. Therefor I reroute all OpenGL operation from the guest
+ * to a frame buffer object (FBO). This is a OpenGL extension, which is
+ * supported by all OS X versions we support (AFAIC tell). Of course the guest
+ * doesn't know that and we have to make sure that the OpenGL state always is
+ * in the right state to paint into the FBO and not to the front/back buffer.
+ * Several functions below (like cocoaBindFramebufferEXT, cocoaGetIntegerv,
+ * ...) doing this. When a swap or finish is triggered by the guest, the
+ * content (which is already bound to an texture) is painted on the screen
+ * within a separate OpenGL context. This allows the usage of the same
+ * resources (texture ids, buffers ...) but at the same time having an
+ * different internal OpenGL state. Another advantage is that we can paint a
+ * thumbnail of the current output in a much more smaller (GPU accelerated
+ * scale) version on a third context and use glReadPixels to get the actual
+ * data. glReadPixels is a very slow operation, but as we just use a much more
+ * smaller image, we can handle it (anyway this is only done 5 times per
+ * second).
+ *
+ * Other things to know:
+ * - If the guest request double buffering, we have to make sure there are two
+ *   buffers. We use the same FBO with 2 color attachments. Also glDrawBuffer
+ *   and glReadBuffer is intercepted to make sure it is painted/read to/from
+ *   the correct buffers. On swap our buffers are swapped and not the
+ *   front/back buffer.
+ * - If the guest request a depth/stencil buffer, a combined render buffer for
+ *   this is created.
+ * - If the size of the guest OpenGL window changes, all FBO's, textures, ...
+ *   need to be recreated.
+ * - We need to track any changes to the parent window
+ *   (create/destroy/move/resize). The various classes like OverlayHelperView,
+ *   OverlayWindow, ... are there for.
+ * - The HGCM service runs on a other thread than the Main GUI. Keeps this
+ *   always in mind (see e.g. performSelectorOnMainThread in renderFBOToView)
+ * - We make heavy use of late binding. We can not be sure that the GUI (or any
+ *   other third party GUI), overwrite our NSOpenGLContext. So we always ask if
+ *   this is our own one, before use. Really neat concept of Objective-C/Cocoa
+ *   ;)
+ *
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#ifdef IN_VMSVGA3D
+# define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#endif
+#include "renderspu_cocoa_helper.h"
+
+#import <Cocoa/Cocoa.h>
+#undef PVM /* sys/param.h (included via Cocoa.h) pollutes the namespace with this define. */
+
+#ifndef IN_VMSVGA3D
+# include "chromium.h" /* For the visual bits of chromium */
+#endif
+
+#include <iprt/assert.h>
+#include <iprt/critsect.h>
+#include <iprt/mem.h>
+#include <iprt/string.h>
+#include <iprt/time.h>
+#include <iprt/thread.h>
+
+#include <VBox/VBoxOGL.h>
+#include <VBox/log.h>
+
+#ifdef IN_VMSVGA3D
+# include "DevVGA-SVGA3d-cocoa.h"
+# include <OpenGL/OpenGL.h>
+# include <OpenGL/gl3.h>
+# include <OpenGL/gl3ext.h>
+# include <OpenGL/glext.h>
+#else
+# include <cr_vreg.h>
+# include <cr_error.h>
+# include <cr_blitter.h>
+# ifdef VBOX_WITH_CRDUMPER_THUMBNAIL
+#  include <cr_pixeldata.h>
+# endif
+# include "renderspu.h"
+#endif
+
+
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+/* Debug macros */
+/** @def FBO
+ * Disable this to see how the output is without the FBO in the middle of the processing chain. */
+#define FBO 1
+/** @def SHOW_WINDOW_BACKGROUND
+ * Define this to see the window background even if the window is clipped. */
+/** @def DEBUG_VERBOSE
+ * Define this to get some debug info about the messages flow. */
+#if 0 || defined(DOXYGEN_RUNNING)
+# define SHOW_WINDOW_BACKGROUND 1
+# define DEBUG_VERBOSE
+#endif
+
+#ifdef DEBUG_VERBOSE
+# error "should be disabled!"
+# ifdef IN_VMSVGA3D
+#  define DEBUG_INFO(text) do { LogRel(text); AssertFailed(); } while (0)
+#  define DEBUG_WARN(text) do { LogRel(text); AssertFailed(); } while (0)
+# else
+#  define DEBUG_INFO(text) do { LogRel(text); AssertFailed(); } while (0)
+#  define DEBUG_WARN(text) do { LogRel(text); AssertFailed(); } while (0)
+# endif
+
+# define DEBUG_MSG(text)   do { LogRel(text); } while (0)
+# define DEBUG_MSG_1(text) do { LogRel(text); } while (0)
+
+#else
+
+# ifdef IN_VMSVGA3D
+#  define DEBUG_INFO(text) do { LogRel(text); } while (0)
+#  define DEBUG_WARN(text) do { LogRel(text); } while (0)
+# else
+#  define DEBUG_INFO(text) do { crInfo text; } while (0)
+#  define DEBUG_WARN(text) do { crWarning text; } while (0)
+#endif
+# define DEBUG_MSG(text)   do {} while (0)
+# define DEBUG_MSG_1(text) do {} while (0)
+
+#endif
+#ifdef IN_VMSVGA3D
+# define DEBUG_MSG_NOT_VMSVGA3D(a_TextArgs)     do {} while (0)
+# define COCOA_LOG_FLOW(a_TextArgs)             LogFlow(a_TextArgs)
+#else
+# define DEBUG_MSG_NOT_VMSVGA3D(a_TextArgs)     DEBUG_MSG(a_TextArgs)
+# define COCOA_LOG_FLOW(a_TextArgs)             DEBUG_MSG(a_TextArgs)
+#endif
+
+
+#define DEBUG_FUNC_ENTER() DEBUG_MSG(("==>%s\n", __PRETTY_FUNCTION__))
+#define DEBUG_FUNC_LEAVE() DEBUG_MSG(("<==%s\n", __PRETTY_FUNCTION__))
+
+#define DEBUG_GL_SAVE_STATE() \
+    do { \
+        glPushAttrib(GL_ALL_ATTRIB_BITS); \
+        glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS); \
+        glMatrixMode(GL_PROJECTION); \
+        glPushMatrix(); \
+        glMatrixMode(GL_TEXTURE); \
+        glPushMatrix(); \
+        glMatrixMode(GL_COLOR); \
+        glPushMatrix(); \
+        glMatrixMode(GL_MODELVIEW); \
+        glPushMatrix(); \
+    } while (0)
+
+#define DEBUG_GL_RESTORE_STATE() \
+    do { \
+        glMatrixMode(GL_MODELVIEW); \
+        glPopMatrix(); \
+        glMatrixMode(GL_COLOR); \
+        glPopMatrix(); \
+        glMatrixMode(GL_TEXTURE); \
+        glPopMatrix(); \
+        glMatrixMode(GL_PROJECTION); \
+        glPopMatrix(); \
+        glPopClientAttrib(); \
+        glPopAttrib(); \
+    } while (0)
+
+#ifdef VBOX_STRICT
+# define DEBUG_CLEAR_GL_ERRORS() \
+    do { \
+        while (glGetError() != GL_NO_ERROR) \
+        { /* nothing */ } \
+    } while (0)
+# define DEBUG_CHECK_GL_ERROR(a_szOp) \
+    do { \
+        GLenum iGlCheckErr = glGetError(); \
+        if (RT_UNLIKELY(iGlCheckErr != GL_NO_ERROR)) \
+            AssertMsgFailed((a_szOp ": iGlCheckErr=%#x\n", iGlCheckErr)); \
+    } while (0)
+#else
+# define DEBUG_CLEAR_GL_ERRORS()        do {} while (0)
+# define DEBUG_CHECK_GL_ERROR(a_szOp)   do {} while (0)
+#endif
+
+/* Whether we control NSView automatic content zooming on Retina/HiDPI displays. */
+#define VBOX_WITH_CONFIGURABLE_HIDPI_SCALING    1
+
+
+#ifdef IN_VMSVGA3D
+
+/*
+ * VMSVGA3D compatibility glue.
+ */
+typedef struct WindowInfo WindowInfo;
+
+# define CR_RGB_BIT             RT_BIT_32(0)
+
+# define CR_ALPHA_BIT           RT_BIT_32(1)
+# define CR_DEPTH_BIT           RT_BIT_32(2)
+# define CR_STENCIL_BIT         RT_BIT_32(3)
+# define CR_ACCUM_BIT           RT_BIT_32(4)
+# define CR_DOUBLE_BIT          RT_BIT_32(5)
+# define CR_STEREO_BIT          RT_BIT_32(6)
+# define CR_MULTISAMPLE_BIT     RT_BIT_32(7)
+
+# define CR_OVERLAY_BIT         RT_BIT_32(8)
+# define CR_PBUFFER_BIT         RT_BIT_32(9)
+# define VMSVGA3D_NON_DEFAULT_PROFILE_BIT RT_BIT_32(31)
+# define CR_ALL_BITS            UINT32_C(0x800003ff)
+
+#endif /* IN_VMSVGA3D */
+
+
+/**
+ * Works functions that creates a NSOpenGLPixelFormat instance.
+ *
+ * @returns Instance.
+ * @param   fVisParams          Context flags.
+ */
+static NSOpenGLPixelFormat *vboxCreatePixelFormat(GLbitfield fVisParams)
+{
+    NSOpenGLPixelFormatAttribute attribs[24] =
+    {
+#ifdef IN_VMSVGA3D
+        NSOpenGLPFAOpenGLProfile, (NSOpenGLPixelFormatAttribute)0,
+#endif
+        NSOpenGLPFAAccelerated,
+        NSOpenGLPFAColorSize, (NSOpenGLPixelFormatAttribute)24
+    };
+#ifndef IN_VMSVGA3D
+    int i = 3;
+#else
+    int i = 3+2;
+    if (fVisParams & VMSVGA3D_NON_DEFAULT_PROFILE_BIT)
+        attribs[1] = VBOX_VMSVGA3D_DEFAULT_OGL_PROFILE >= 3.2 ? NSOpenGLProfileVersionLegacy :  NSOpenGLProfileVersion3_2Core;
+    else
+        attribs[1] = VBOX_VMSVGA3D_DEFAULT_OGL_PROFILE >= 3.2 ? NSOpenGLProfileVersion3_2Core : NSOpenGLProfileVersionLegacy;
+#endif
+
+    if (fVisParams & CR_ALPHA_BIT)
+    {
+        COCOA_LOG_FLOW(("  CR_ALPHA_BIT requested\n"));
+        attribs[i++] = NSOpenGLPFAAlphaSize;
+        attribs[i++] = 8;
+    }
+    if (fVisParams & CR_DEPTH_BIT)
+    {
+        COCOA_LOG_FLOW(("  CR_DEPTH_BIT requested\n"));
+        attribs[i++] = NSOpenGLPFADepthSize;
+        attribs[i++] = 24;
+    }
+    if (fVisParams & CR_STENCIL_BIT)
+    {
+        COCOA_LOG_FLOW(("  CR_STENCIL_BIT requested\n"));
+        attribs[i++] = NSOpenGLPFAStencilSize;
+        attribs[i++] = 8;
+    }
+    if (fVisParams & CR_ACCUM_BIT)
+    {
+        COCOA_LOG_FLOW(("  CR_ACCUM_BIT requested\n"));
+        attribs[i++] = NSOpenGLPFAAccumSize;
+        if (fVisParams & CR_ALPHA_BIT)
+            attribs[i++] = 32;
+        else
+            attribs[i++] = 24;
+    }
+    if (fVisParams & CR_MULTISAMPLE_BIT)
+    {
+        COCOA_LOG_FLOW(("  CR_MULTISAMPLE_BIT requested\n"));
+        attribs[i++] = NSOpenGLPFASampleBuffers;
+        attribs[i++] = 1;
+        attribs[i++] = NSOpenGLPFASamples;
+        attribs[i++] = 4;
+    }
+    if (fVisParams & CR_DOUBLE_BIT)
+    {
+        COCOA_LOG_FLOW(("  CR_DOUBLE_BIT requested\n"));
+        attribs[i++] = NSOpenGLPFADoubleBuffer;
+    }
+    if (fVisParams & CR_STEREO_BIT)
+    {
+        /* We don't support that.
+        COCOA_LOG_FLOW(("  CR_STEREO_BIT requested\n"));
+        attribs[i++] = NSOpenGLPFAStereo;
+        */
+    }
+
+    if (VBoxOglIsOfflineRenderingAppropriate())
+    {
+        COCOA_LOG_FLOW(("  Offline rendering is enabled\n"));
+        attribs[i++] = NSOpenGLPFAAllowOfflineRenderers;
+    }
+
+    /* Mark the end */
+    attribs[i++] = 0;
+
+    /* Instantiate the pixel format object. */
+    return [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs];
+}
+
+
+static NSOpenGLContext *vboxCtxGetCurrent(void)
+{
+#ifdef IN_VMSVGA3D
+    return [NSOpenGLContext currentContext];
+#else
+    GET_CONTEXT(pCtxInfo);
+    if (pCtxInfo)
+    {
+        Assert(pCtxInfo->context);
+        return pCtxInfo->context;
+    }
+    return nil;
+#endif
+}
+
+static bool vboxCtxSyncCurrentInfo(void)
+{
+#ifdef IN_VMSVGA3D
+    return false;
+#else
+    bool fAdjusted = false;
+    GET_CONTEXT(pCtxInfo);
+    NSOpenGLContext *pCtx = [NSOpenGLContext currentContext];
+    NSView *pView = pCtx ? [pCtx view] : nil;
+    if (pCtxInfo)
+    {
+        WindowInfo *pWinInfo = pCtxInfo->currentWindow;
+        Assert(pWinInfo);
+        if (   pCtxInfo->context != pCtx
+            || pWinInfo->window  != pView)
+        {
+            renderspu_SystemMakeCurrent(pWinInfo, 0, pCtxInfo);
+            fAdjusted = true;
+        }
+    }
+    else if (pCtx)
+    {
+        [NSOpenGLContext clearCurrentContext];
+        fAdjusted = true;
+    }
+
+    return fAdjusted;
+#endif
+}
+
+
+/**
+ * State carrying structure for use with vboxCtxEnter and vboxCtxLeave
+ */
+typedef struct VBOX_CR_RENDER_CTX_INFO
+{
+    bool                fIsValid;
+    NSOpenGLContext    *pCtx;
+    NSView             *pView;
+} VBOX_CR_RENDER_CTX_INFO;
+/** Pointer to render context info for use with vboxCtxEnter/Leave. */
+typedef VBOX_CR_RENDER_CTX_INFO *PVBOX_CR_RENDER_CTX_INFO;
+
+static void vboxCtxEnter(NSOpenGLContext *pNewCtx, PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
+{
+    NSOpenGLContext *pOldCtx  = vboxCtxGetCurrent();
+    NSView          *pOldView = pOldCtx ? [pOldCtx view] : nil;
+    NSView          *pNewView = [pNewCtx view];
+
+    Assert(pNewCtx);
+
+    if (   pOldCtx  != pNewCtx
+        || pOldView != pNewView)
+    {
+        if (pOldCtx != nil)
+            glFlush();
+
+        DEBUG_CLEAR_GL_ERRORS();
+        [pNewCtx makeCurrentContext];
+        DEBUG_CHECK_GL_ERROR("makeCurrentContext");
+
+        pCtxInfo->fIsValid = true;
+        pCtxInfo->pCtx     = pOldCtx;
+        /** @todo r=bird: Why do we save the NEW VIEW here? vboxCtxLeave calls it 'pOldView'. Bug? */
+        pCtxInfo->pView    = pNewView;
+    }
+    else
+    {
+        /* No context switch necessary. */
+        pCtxInfo->fIsValid = false;
+    }
+}
+
+static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
+{
+    if (pCtxInfo->fIsValid)
+    {
+        NSOpenGLContext *pOldCtx  = pCtxInfo->pCtx;
+        NSView          *pOldView = pCtxInfo->pView;
+
+        glFlush();
+        if (pOldCtx != nil)
+        {
+            /* vboxCtxEnter saves the new view, not the old. So, what we actually
+               do here is switching the view of the old context to that of the new
+               one (wrt vboxCtxEnter) before making it current. */
+            /** @todo r=bird: Figure out what we really want to do here, and either rename
+             *        pOldView or fix the code. */
+            if ([pOldCtx view] != pOldView)
+            {
+                DEBUG_CLEAR_GL_ERRORS();
+                [pOldCtx setView: pOldView];
+                DEBUG_CHECK_GL_ERROR("setView");
+            }
+
+            DEBUG_CLEAR_GL_ERRORS();
+            [pOldCtx makeCurrentContext];
+            DEBUG_CHECK_GL_ERROR("makeCurrentContext");
+
+#ifdef VBOX_STRICT
+            {
+                NSOpenGLContext *pTstOldCtx  = [NSOpenGLContext currentContext];
+                NSView          *pTstOldView = pTstOldCtx ? [pTstOldCtx view] : nil;
+                Assert(pTstOldCtx == pOldCtx);
+                Assert(pTstOldView == pOldView);
+            }
+#endif
+        }
+        else
+        {
+            [NSOpenGLContext clearCurrentContext];
+        }
+    }
+}
+
+
+/**
+ * Custom OpenGL context class.
+ *
+ * This implementation doesn't allow to set a view to the context, but save the
+ * view for later use.  Also it saves a copy of the pixel format used to create
+ * that context for later use.
+ */
+@interface OverlayOpenGLContext: NSOpenGLContext
+{
+@private
+    NSOpenGLPixelFormat *m_pPixelFormat;
+    NSView              *m_pView;
+}
+- (NSOpenGLPixelFormat *)openGLPixelFormat;
+@end
+
+/**
+ * Abstrack task class.
+ */
+@interface VBoxTask : NSObject
+{
+}
+- (void)run;
+@end
+
+@implementation VBoxTask
+/** Run method that the child classes must reimplement.
+ *  This will abort the process. */
+- (void)run
+{
+    AssertReleaseFailed();
+}
+@end
+
+
+/**
+ * Generic task class for executing a given method select.
+ */
+@interface VBoxTaskPerformSelector : VBoxTask
+{
+@private
+    id  m_Object;
+    SEL m_Selector;
+    id  m_Arg;
+}
+- (id)initWithObject:(id)aObject selector:(SEL)aSelector arg:(id)aArg;
+- (void)run;
+- (void)dealloc;
+@end
+
+@implementation VBoxTaskPerformSelector
+
+/**
+ * Initializes a VBoxTaskPerformSelector.
+ *
+ * @param   aObject             The object (reference not consumed).
+ * @param   aSelector           The method selector.
+ * @param   aArg                The method argument (reference not consumed).
+ */
+- (id)initWithObject:(id)aObject selector:(SEL)aSelector arg:(id)aArg
+{
+    self = [super init];
+    if (self)
+    {
+        [aObject retain];
+        m_Object = aObject;
+        m_Selector = aSelector;
+        if (aArg != nil)
+            [aArg retain];
+        m_Arg = aArg;
+    }
+
+    return self;
+}
+
+- (void)run
+{
+    [m_Object performSelector:m_Selector withObject:m_Arg];
+}
+
+- (void)dealloc
+{
+    [m_Object release];
+    if (m_Arg != nil)
+        [m_Arg release];
+
+    [super dealloc];
+}
+@end
+
+
+/**
+ *
+ */
+@interface VBoxTaskComposite : VBoxTask
+{
+@private
+    NSUInteger      m_CurIndex;
+    RTCRITSECT      m_Lock;
+    NSMutableArray *m_pArray;
+}
+- (id)init;
+- (void)add:(VBoxTask *)pTask;
+- (void)run;
+- (void)dealloc;
+@end
+
+@implementation VBoxTaskComposite
+- (id)init
+{
+    self = [super init];
+
+    if (self)
+    {
+        int rc = RTCritSectInit(&m_Lock);
+        if (!RT_SUCCESS(rc))
+        {
+            DEBUG_WARN(("RTCritSectInit failed %d\n", rc));
+            return nil;
+        }
+
+        m_CurIndex = 0;
+
+        m_pArray = [[NSMutableArray alloc] init];
+    }
+
+    return self;
+}
+
+/**
+ * Adds a task to the composite task object.
+ *
+ * @param   pTask               Task to add.  Reference is NOT consumed.
+ */
+- (void)add:(VBoxTask *)pTask
+{
+    [pTask retain];
+    int rc = RTCritSectEnter(&m_Lock);
+    if (RT_SUCCESS(rc))
+    {
+        [m_pArray addObject:pTask];
+        RTCritSectLeave(&m_Lock);
+    }
+    else
+    {
+        DEBUG_WARN(("RTCritSectEnter failed %d\n", rc));
+        [pTask release];
+    }
+}
+
+- (void)run
+{
+    for (;;)
+    {
+        /*
+         * Dequeue a task.
+         */
+        int rc = RTCritSectEnter(&m_Lock);
+        if (RT_FAILURE(rc))
+        {
+            DEBUG_WARN(("RTCritSectEnter failed %d\n", rc));
+            break;
+        }
+
+        NSUInteger count = [m_pArray count];
+        Assert(m_CurIndex <= count);
+        if (m_CurIndex == count)
+        {
+            [m_pArray removeAllObjects];
+            m_CurIndex = 0;
+            RTCritSectLeave(&m_Lock);
+            break;
+        }
+
+        VBoxTask *pTask = (VBoxTask *)[m_pArray objectAtIndex:m_CurIndex];
+        Assert(pTask != nil);
+
+        ++m_CurIndex;
+
+        /*
+         * Remove the first 1025 empty entires.
+         */
+        if (m_CurIndex > 1024)
+        {
+            NSRange range;
+            range.location = 0;
+            range.length = m_CurIndex;
+            [m_pArray removeObjectsInRange:range];
+            m_CurIndex = 0;
+        }
+        RTCritSectLeave(&m_Lock);
+
+        /*
+         * Run the task and release it.
+         */
+        [pTask run];
+        [pTask release];
+    }
+}
+
+- (void)dealloc
+{
+    NSUInteger count = [m_pArray count];
+    for (;m_CurIndex < count; ++m_CurIndex)
+    {
+        VBoxTask *pTask = (VBoxTask*)[m_pArray objectAtIndex:m_CurIndex];
+        DEBUG_WARN(("dealloc with non-empty tasks! %p\n", pTask));
+        [pTask release];
+    }
+
+    [m_pArray release];
+    RTCritSectDelete(&m_Lock);
+
+    [super dealloc];
+}
+@end
+
+
+/**
+ *
+ *
+ */
+@interface VBoxMainThreadTaskRunner : NSObject
+{
+@private
+    VBoxTaskComposite *m_pTasks;
+}
+- (id)init;
+- (void)add:(VBoxTask *)pTask;
+- (void)addObj:(id)aObject selector:(SEL)aSelector arg:(id)aArg;
+- (void)runTasks;
+- (bool)runTasksSyncIfPossible;
+- (void)dealloc;
++ (VBoxMainThreadTaskRunner *) globalInstance;
+@end
+
+@implementation VBoxMainThreadTaskRunner
+- (id)init
+{
+    self = [super init];
+    if (self)
+    {
+        m_pTasks = [[VBoxTaskComposite alloc] init];
+    }
+
+    return self;
+}
+
++ (VBoxMainThreadTaskRunner *) globalInstance
+{
+    static dispatch_once_t s_DispatchOnce;
+    static VBoxMainThreadTaskRunner *s_pRunner = nil;
+    dispatch_once(&s_DispatchOnce, ^{
+        s_pRunner = [[VBoxMainThreadTaskRunner alloc] init];
+    });
+    return s_pRunner;
+}
+
+- (void)add:(VBoxTask *)pTask
+{
+    DEBUG_FUNC_ENTER();
+    [m_pTasks add:pTask];
+    /** @todo r=bird: Unbalanced [self retain]. */
+    [self retain];
+
+    if (![self runTasksSyncIfPossible])
+    {
+        DEBUG_MSG(("task will be processed async\n"));
+        [self performSelectorOnMainThread:@selector(runTasks) withObject:nil waitUntilDone:NO];
+    }
+
+    DEBUG_FUNC_LEAVE();
+}
+
+/**
+ * Adds a task calling an object method (selector).
+ *
+ * @param   aObject             The object (reference not consumed)..
+ * @param   aSelector           The method selector.
+ * @param   aArg                The method argument (reference not consumed).
+ */
+- (void)addObj:(id)aObject selector:(SEL)aSelector arg:(id)aArg
+{
+    VBoxTaskPerformSelector *pSelTask = [[VBoxTaskPerformSelector alloc] initWithObject:aObject selector:aSelector arg:aArg];
+    [self add:pSelTask];
+    [pSelTask release];
+}
+
+
+/**
+ * Internal method for running the pending tasks.
+ */
+- (void)runTasks
+{
+    if ([NSThread isMainThread])
+    {
+        [m_pTasks run];
+        /** @todo r=bird: This release and the retain in the add method aren't
+         *        necessarily balanced if there are more than one call to add().
+         *
+         *  This could probably end up deleting the singleton prematurely and leave
+         *  globalInstance() returning pointers to a stale object in freed memory,
+         *  quite possibly causing crashes or/and heap corruption. */
+        [self release];
+    }
+    else
+    {
+        DEBUG_WARN(("run tasks called not on main thread!\n"));
+#ifndef DEBUG_VERBOSE
+        AssertFailed();
+#endif
+        [self performSelectorOnMainThread:@selector(runTasks) withObject:nil waitUntilDone:YES];
+    }
+}
+
+/**
+ * Callback for calling runTasks via renderspuCalloutClient.
+ * @param   pvUser      The VBoxMainThreadTaskRunner singleton.
+ */
+static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
+{
+    DEBUG_FUNC_ENTER();
+    VBoxMainThreadTaskRunner *pRunner = (VBoxMainThreadTaskRunner *)pvUser;
+    Assert(pRunner == [VBoxMainThreadTaskRunner globalInstance]);
+    [pRunner runTasks];
+    DEBUG_FUNC_LEAVE();
+}
+
+/**
+ * Runs pending tasks synchronously, if possible in the current context.
+ *
+ * @returns true if executed tasks, false if not possible.
+ */
+- (bool)runTasksSyncIfPossible
+{
+#ifndef IN_VMSVGA3D
+    /*
+     * Call on main thread (?) via renderspuCalloutClient (whatever that is).
+     */
+    if (renderspuCalloutAvailable())
+    {
+        Assert(![NSThread isMainThread]);
+        renderspuCalloutClient(VBoxMainThreadTaskRunner_RcdRunCallback, self);
+        return true;
+    }
+#endif
+
+    /*
+     * Run directly if on main thread.
+     */
+    if ([NSThread isMainThread])
+    {
+        [self runTasks];
+        return true;
+    }
+
+    /* Not possible. */
+    return false;
+}
+
+- (void)dealloc
+{
+    /** @todo r=bird: WTF is the point of the deallocator. The object is a singelton
+     *        stored in an inaccessible static variable! */
+    [m_pTasks release];
+    m_pTasks = nil;
+
+    [super dealloc];
+}
+
+@end
+
+#ifndef IN_VMSVGA3D
+@class DockOverlayView;
+#endif
+
+/**
+ * The custom view class.
+ *
+ * This is the main class of the cocoa OpenGL implementation.  It manages a
+ * frame buffer object for the rendering of the guest applications.  The guest
+ * applications render in this frame buffer which is bound to an OpenGL texture.
+ * To display the guest content, a secondary shared OpenGL context of the main
+ * OpenGL context is created.  The secondary context is marked as non-opaque and
+ * the texture is displayed on an object which is composed out of the several
+ * visible region rectangles.
+ */
+@interface OverlayView : NSView
+{
+@private
+    NSView             *m_pParentView;
+    NSWindow           *m_pOverlayWin;
+
+    NSOpenGLContext    *m_pGLCtx;
+    NSOpenGLContext    *m_pSharedGLCtx;
+    RTTHREAD            m_Thread;
+
+    GLuint              m_FBOId;
+
+#ifndef IN_VMSVGA3D
+    /** The corresponding dock tile view of this OpenGL view & all helper
+     * members. */
+    DockOverlayView    *m_DockTileView;
+
+    GLfloat             m_FBOThumbScaleX;
+    GLfloat             m_FBOThumbScaleY;
+    uint64_t            m_msDockUpdateTS;
+#endif
+
+    /** @name For clipping
+     * @remarks appears to be unused and a complete waste of time + heap.
+     * @{ */
+    GLint               m_cClipRects;
+    GLint              *m_paClipRects;
+    /** @} */
+
+    /** @name Position/Size tracking
+     * @{ */
+    NSPoint             m_Pos;
+    NSSize              m_Size;
+    /** @} */
+
+    /** This is necessary for clipping on the root window */
+    NSRect              m_RootRect;
+    float               m_yInvRootOffset;
+
+#ifndef IN_VMSVGA3D
+    CR_BLITTER         *m_pBlitter;
+    WindowInfo         *m_pWinInfo;
+#endif
+    bool                m_fNeedViewportUpdate;
+    bool                m_fNeedCtxUpdate;
+    bool                m_fDataVisible;
+    bool                m_fCleanupNeeded;
+    bool                m_fEverSized;
+}
+- (id)initWithFrame:(NSRect)frame thread:(RTTHREAD)aThread parentView:(NSView *)pParentView winInfo:(WindowInfo *)pWinInfo
+         fVisParams:(GLbitfield) fVisParams;
+- (void)setGLCtx:(NSOpenGLContext*)pCtx;
+- (NSOpenGLContext *)glCtx;
+
+- (void)setParentView: (NSView *)view;
+- (NSView *)parentView;
+- (void)setOverlayWin: (NSWindow *)win;
+- (NSWindow *)overlayWin;
+
+- (void)vboxSetPos:(NSPoint)pos;
+- (void)vboxSetPosUI:(NSPoint)pos;
+- (void)vboxSetPosUIObj:(NSValue *)pPos;
+- (NSPoint)pos;
+- (bool)isEverSized;
+- (void)vboxDestroy;
+- (void)vboxSetSizeUI:(NSSize)size;
+- (void)vboxSetSizeUIObj:(NSValue *)pSize;
+- (void)vboxSetSize:(NSSize)size;
+- (NSSize)size;
+- (void)updateViewportCS;
+#ifdef VBOX_WITH_CONFIGURABLE_HIDPI_SCALING
+- (NSRect)safeConvertRectToBacking:(NSRect *)pRect;
+- (CGFloat)safeGetBackingScaleFactor;
+#endif
+- (NSRect)safeConvertToScreen:(NSRect *)pRect;
+- (void)vboxReshapePerform;
+- (void)vboxReshapeOnResizePerform;
+- (void)vboxReshapeOnReparentPerform;
+
+#ifndef IN_VMSVGA3D
+- (void)createDockTile;
+- (void)deleteDockTile;
+#endif
+
+- (void)makeCurrentFBO;
+- (void)swapFBO;
+- (void)vboxSetVisible:(GLboolean)fVisible;
+- (void)vboxSetVisibleUIObj:(NSNumber *)pVisible;
+- (void)vboxSetVisibleUI:(GLboolean)fVisible;
+- (void)vboxTryDraw;
+- (void)vboxTryDrawUI;
+- (void)vboxReparent:(NSView *)pParentView;
+- (void)vboxReparentUI:(NSView *)pParentView;
+- (void)vboxPresent:(const VBOXVR_SCR_COMPOSITOR *)pCompositor;
+- (void)vboxPresentCS:(const VBOXVR_SCR_COMPOSITOR *)pCompositor;
+#ifndef IN_VMSVGA3D
+- (void)vboxPresentToDockTileCS:(const VBOXVR_SCR_COMPOSITOR *)pCompositor;
+#endif
+- (void)vboxPresentToViewCS:(const VBOXVR_SCR_COMPOSITOR *)pCompositor;
+- (void)presentComposition:(const VBOXVR_SCR_COMPOSITOR_ENTRY *)pChangedEntry;
+#ifndef IN_VMSVGA3D
+- (void)vboxBlitterSyncWindow;
+#endif
+
+- (void)clearVisibleRegions;
+- (void)setVisibleRegions:(GLint)cRects paRects:(const GLint *)paRects;
+- (GLboolean)vboxNeedsEmptyPresent;
+
+#ifndef IN_VMSVGA3D
+- (NSView *)dockTileScreen;
+- (void)reshapeDockTile;
+#endif
+- (void)cleanupData;
+@end
+
+/**
+ * Helper view.
+ *
+ * This view is added as a sub view of the parent view to track
+ * main window changes. Whenever the main window is changed
+ * (which happens on fullscreen/seamless entry/exit) the overlay
+ * window is informed & can add them self as a child window
+ * again.
+ */
+@class OverlayWindow;
+@interface OverlayHelperView: NSView
+{
+@private
+    OverlayWindow *m_pOverlayWindow;
+}
+-(id)initWithOverlayWindow:(NSRect)frame overlayWindow:(OverlayWindow *)pOverlayWindow;
+@end
+
+/**
+ * Custom window class.
+ *
+ * This is the overlay window which contains our custom NSView.
+ * Its a direct child of the Qt Main window. It marks its background
+ * transparent & non opaque to make clipping possible. It also disable mouse
+ * events and handle frame change events of the parent view.
+ */
+@interface OverlayWindow : NSWindow
+{
+@private
+    NSView             *m_pParentView;
+    OverlayView        *m_pOverlayView;
+    OverlayHelperView  *m_pOverlayHelperView;
+    NSThread           *m_Thread;
+}
+- (id)initWithParentView:(NSView *)pParentView overlayView:(OverlayView *)pOverlayView;
+- (void)parentWindowFrameChanged:(NSNotification *)note;
+- (void)parentWindowChanged:(NSWindow *)pWindow;
+@end
+
+
+#ifndef IN_VMSVGA3D
+/**
+ * Dock overlay view class.
+ */
+@interface DockOverlayView: NSView
+{
+    NSBitmapImageRep   *m_ThumbBitmap;
+    NSImage            *m_ThumbImage;
+    NSLock             *m_Lock;
+}
+- (void)dealloc;
+- (void)cleanup;
+- (void)lock;
+- (void)unlock;
+- (void)setFrame:(NSRect)frame;
+- (void)drawRect:(NSRect)aRect;
+- (NSBitmapImageRep *)thumbBitmap;
+- (NSImage *)thumbImage;
+@end
+
+@implementation DockOverlayView
+- (id)init
+{
+    DEBUG_FUNC_ENTER();
+    self = [super init];
+    if (self)
+    {
+        /*
+         * We need a lock cause the thumb image could be accessed from the main
+         * thread when someone is calling display on the dock tile & from the
+         * OpenGL thread when the thumbnail is updated.
+         */
+        m_Lock = [[NSLock alloc] init];
+    }
+
+    DEBUG_FUNC_LEAVE();
+
+    return self;
+}
+
+- (void)dealloc
+{
+    DEBUG_FUNC_ENTER();
+
+    [self cleanup];
+    [m_Lock release];
+
+    [super dealloc];
+
+    DEBUG_FUNC_LEAVE();
+}
+
+- (void)cleanup
+{
+    DEBUG_FUNC_ENTER();
+
+    if (m_ThumbImage != nil)
+    {
+        [m_ThumbImage release];
+        m_ThumbImage = nil;
+    }
+
+    if (m_ThumbBitmap != nil)
+    {
+        [m_ThumbBitmap release];
+        m_ThumbBitmap = nil;
+    }
+
+    DEBUG_FUNC_LEAVE();
+}
+
+- (void)lock
+{
+    DEBUG_FUNC_ENTER();
+    [m_Lock lock];
+    DEBUG_FUNC_LEAVE();
+}
+
+- (void)unlock
+{
+    DEBUG_FUNC_ENTER();
+    [m_Lock unlock];
+    DEBUG_FUNC_LEAVE();
+}
+
+- (void)setFrame:(NSRect)frame
+{
+    DEBUG_FUNC_ENTER();
+    [super setFrame:frame];
+
+    [self lock];
+    [self cleanup];
+
+    if (   frame.size.width > 0
+        && frame.size.height > 0)
+    {
+        /* Create a buffer for our thumbnail image. Its in the size of this view. */
+        m_ThumbBitmap = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
+            pixelsWide:frame.size.width
+            pixelsHigh:frame.size.height
+            bitsPerSample:8
+            samplesPerPixel:4
+            hasAlpha:YES
+            isPlanar:NO
+            colorSpaceName:NSDeviceRGBColorSpace
+            bitmapFormat:NSAlphaFirstBitmapFormat
+            bytesPerRow:frame.size.width * 4
+            bitsPerPixel:8 * 4
+        ];
+        m_ThumbImage = [[NSImage alloc] initWithSize:[m_ThumbBitmap size]];
+        [m_ThumbImage addRepresentation:m_ThumbBitmap];
+    }
+
+    [self unlock];
+    DEBUG_FUNC_LEAVE();
+}
+
+- (BOOL)isFlipped
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_FUNC_LEAVE();
+    return YES;
+}
+
+- (void)drawRect:(NSRect)aRect
+{
+    NSRect frame;
+    DEBUG_FUNC_ENTER();
+    [self lock];
+
+#ifdef SHOW_WINDOW_BACKGROUND
+    [[NSColor colorWithCalibratedRed:1.0 green:0.0 blue:0.0 alpha:0.7] set];
+    frame = [self frame];
+    [NSBezierPath fillRect:NSMakeRect(0, 0, frame.size.width, frame.size.height)];
+#endif /* SHOW_WINDOW_BACKGROUND */
+    if (m_ThumbImage != nil)
+        [m_ThumbImage drawAtPoint:NSMakePoint(0, 0) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
+
+    [self unlock];
+    DEBUG_FUNC_LEAVE();
+}
+
+- (NSBitmapImageRep *)thumbBitmap
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_FUNC_LEAVE();
+    return m_ThumbBitmap;
+}
+
+- (NSImage *)thumbImage
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_FUNC_LEAVE();
+    return m_ThumbImage;
+}
+@end
+#endif /* !IN_VMSVGA3D */
+
+
+/********************************************************************************
+*
+* OverlayOpenGLContext class implementation
+*
+********************************************************************************/
+@implementation OverlayOpenGLContext
+
+-(id)initWithFormat:(NSOpenGLPixelFormat *)format shareContext:(NSOpenGLContext *)share
+{
+    DEBUG_FUNC_ENTER();
+
+    m_pPixelFormat = NULL;
+    m_pView = NULL;
+
+    self = [super initWithFormat:format shareContext:share];
+    Assert(self != nil);
+    if (self)
+        m_pPixelFormat = format;
+
+    DEBUG_MSG(("OCTX(%p): init OverlayOpenGLContext\n", (void *)self));
+    DEBUG_FUNC_LEAVE();
+    return self;
+}
+
+- (void)dealloc
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_MSG(("OCTX(%p): dealloc OverlayOpenGLContext\n", (void *)self));
+
+    [m_pPixelFormat release];
+
+    [super dealloc];
+
+    DEBUG_FUNC_LEAVE();
+}
+
+-(bool)isDoubleBuffer
+{
+    DEBUG_FUNC_ENTER();
+
+    GLint val;
+    [m_pPixelFormat getValues:&val forAttribute:NSOpenGLPFADoubleBuffer forVirtualScreen:0];
+
+    DEBUG_FUNC_LEAVE();
+    return val == GL_TRUE ? YES : NO;
+}
+
+-(void)setView:(NSView *)view
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_MSG(("OCTX(%p): setView: new view: %p\n", (void *)self, (void *)view));
+
+#if 1 /* def FBO */
+    m_pView = view;;
+#else
+    [super setView: view];
+#endif
+
+    DEBUG_FUNC_LEAVE();
+}
+
+-(NSView *)view
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_FUNC_LEAVE();
+#if 1 /* def FBO */
+    return m_pView;
+#else
+    return [super view];
+#endif
+}
+
+-(void)clearDrawable
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_MSG(("OCTX(%p): clearDrawable\n", (void *)self));
+
+    m_pView = NULL;;
+    [super clearDrawable];
+
+    DEBUG_FUNC_LEAVE();
+}
+
+-(NSOpenGLPixelFormat *)openGLPixelFormat
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_FUNC_LEAVE();
+
+    return m_pPixelFormat;
+}
+
+@end  /* @implementation OverlayOpenGLContext */
+
+
+/********************************************************************************
+*
+* OverlayHelperView class implementation
+*
+********************************************************************************/
+@implementation OverlayHelperView
+
+-(id)initWithOverlayWindow:(NSRect)frame overlayWindow:(OverlayWindow *)pOverlayWindow
+{
+    DEBUG_FUNC_ENTER();
+
+    self = [super initWithFrame:frame];
+#ifdef IN_VMSVGA3D
+    self.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
+#endif
+
+    m_pOverlayWindow = pOverlayWindow;
+
+    DEBUG_MSG(("OHVW(%p): init OverlayHelperView\n", (void *)self));
+    DEBUG_FUNC_LEAVE();
+    return self;
+}
+
+-(void)viewDidMoveToWindow
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_MSG(("OHVW(%p): viewDidMoveToWindow: new win: %p\n", (void *)self, (void *)[self window]));
+
+    [m_pOverlayWindow parentWindowChanged:[self window]];
+
+    DEBUG_FUNC_LEAVE();
+}
+
+@end
+
+
+/********************************************************************************
+*
+* OverlayWindow class implementation
+*
+********************************************************************************/
+@implementation OverlayWindow
+
+- (id)initWithParentView:(NSView *)pParentView overlayView:(OverlayView *)pOverlayView
+{
+    DEBUG_FUNC_ENTER();
+    NSWindow *pParentWin = nil;
+
+    self = [super initWithContentRect:NSZeroRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
+    if (self)
+    {
+        m_pParentView = pParentView;
+        m_pOverlayView = pOverlayView;
+        m_Thread = [NSThread currentThread];
+
+        [m_pOverlayView setOverlayWin: self];
+
+#ifdef IN_VMSVGA3D
+        NSRect frame = [pParentView frame];
+        frame.origin.x = frame.origin.x = 0;
+        m_pOverlayHelperView = [[OverlayHelperView alloc] initWithOverlayWindow:frame
+                                                                  overlayWindow:self];
+#else
+        m_pOverlayHelperView = [[OverlayHelperView alloc] initWithOverlayWindow:NSZeroRect
+                                                                  overlayWindow:self];
+#endif
+
+        /* Add the helper view as a child of the parent view to get notifications */
+        [pParentView addSubview:m_pOverlayHelperView];
+
+        /* Make sure this window is transparent */
+#ifdef SHOW_WINDOW_BACKGROUND
+        /* For debugging */
+        [self setBackgroundColor:[NSColor colorWithCalibratedRed:1.0 green:0.0 blue:0.0 alpha:0.7]];
+#else
+        [self setBackgroundColor:[NSColor clearColor]];
+#endif
+        [self setOpaque:NO];
+        [self setAlphaValue:.999];
+
+        /* Disable mouse events for this window */
+        [self setIgnoresMouseEvents:YES];
+
+        pParentWin = [m_pParentView window];
+
+        /* Initial set the position to the parents view top/left (Compiz fix). */
+        [self setFrameOrigin:
+            [pParentWin convertBaseToScreen:
+                [m_pParentView convertPoint:NSZeroPoint toView:nil]]];
+
+        /* Set the overlay view as our content view */
+        [self setContentView:m_pOverlayView];
+
+        /* Add ourself as a child to the parent views window. Note: this has to
+         * be done last so that everything else is setup in
+         * parentWindowChanged. */
+        [pParentWin addChildWindow:self ordered:NSWindowAbove];
+    }
+
+    DEBUG_MSG(("OWIN(%p): init OverlayWindow\n", (void *)self));
+    DEBUG_FUNC_LEAVE();
+    return self;
+}
+
+- (void)dealloc
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_MSG(("OWIN(%p): dealloc OverlayWindow\n", (void *)self));
+
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+
+    [m_pOverlayHelperView removeFromSuperview];
+    [m_pOverlayHelperView release];
+
+    [super dealloc];
+
+    DEBUG_FUNC_LEAVE();
+}
+
+- (void)parentWindowFrameChanged:(NSNotification *)pNote
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_MSG(("OWIN(%p): parentWindowFrameChanged\n", (void *)self));
+
+    /*
+     * Reposition this window with the help of the OverlayView. Perform the
+     * call in the OpenGL thread.
+     */
+    /*
+    [m_pOverlayView performSelector:@selector(vboxReshapePerform) onThread:m_Thread withObject:nil waitUntilDone:YES];
+    */
+
+    if ([m_pOverlayView isEverSized])
+    {
+        if ([NSThread isMainThread])
+            [m_pOverlayView vboxReshapePerform];
+        else
+            [self performSelectorOnMainThread:@selector(vboxReshapePerform) withObject:nil waitUntilDone:NO];
+    }
+
+    DEBUG_FUNC_LEAVE();
+}
+
+- (void)parentWindowChanged:(NSWindow *)pWindow
+{
+    DEBUG_FUNC_ENTER();
+    DEBUG_MSG(("OWIN(%p): parentWindowChanged\n", (void *)self));
+
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+
+    if (pWindow != nil)
+    {
+        /* Ask to get notifications when our parent window frame changes. */
+        [[NSNotificationCenter defaultCenter]
+            addObserver:self
+            selector:@selector(parentWindowFrameChanged:)
+            name:NSWindowDidResizeNotification
+            object:pWindow];
+
+        /* Add us self as child window */
+        [pWindow addChildWindow:self ordered:NSWindowAbove];
+
+        /*
+         * Reshape the overlay view after a short waiting time to let the main
+         * window resize itself properly.
+         */
+        /*
+        [m_pOverlayView performSelector:@selector(vboxReshapePerform) withObject:nil afterDelay:0.2];
+        [NSTimer scheduledTimerWithTimeInterval:0.2 target:m_pOverlayView selector:@selector(vboxReshapePerform) userInfo:nil repeats:NO];
+        */
+
+        if ([m_pOverlayView isEverSized])
+        {
+            if ([NSThread isMainThread])
+                [m_pOverlayView vboxReshapePerform];
+            else
+                [self performSelectorOnMainThread:@selector(vboxReshapePerform) withObject:nil waitUntilDone:NO];
+        }
+    }
+
+    DEBUG_FUNC_LEAVE();
+}
+
+@end /* @implementation OverlayWindow */
+
+
+
+/********************************************************************************
+*
+* OverlayView class implementation
+*
+********************************************************************************/
+@implementation OverlayView
+
+- (id)initWithFrame:(NSRect)frame thread:(RTTHREAD)aThread parentView:(NSView *)pParentView winInfo:(WindowInfo *)pWinInfo
+         fVisParams:(GLbitfield) fVisParams
+{
+    COCOA_LOG_FLOW(("%s: self=%p aThread=%p pParentView=%p pWinInfo=%p fVisParams=%#x\n", __PRETTY_FUNCTION__, (void *)self,
+                    (void *)aThread, (void *)pParentView, (void *)pWinInfo, fVisParams));
+
+    m_pParentView             = pParentView;
+    /* Make some reasonable defaults */
+    m_pGLCtx                  = nil;
+    m_pSharedGLCtx            = nil;
+    m_Thread                  = aThread;
+    m_FBOId                   = 0;
+    m_cClipRects              = 0;
+    m_paClipRects             = NULL;
+    m_Pos                     = NSZeroPoint;
+    m_Size                    = NSMakeSize(1, 1);
+    m_RootRect                = NSMakeRect(0, 0, m_Size.width, m_Size.height);
+    m_yInvRootOffset          = 0;
+#ifndef IN_VMSVGA3D
+    m_pBlitter                = nil;
+    m_pWinInfo                = pWinInfo;
+#endif
+    m_fNeedViewportUpdate     = true;
+    m_fNeedCtxUpdate          = true;
+    m_fDataVisible            = false;
+    m_fCleanupNeeded          = false;
+    m_fEverSized              = false;
+
+    self = [super initWithFrame:frame];
+#if defined(VBOX_WITH_CONFIGURABLE_HIDPI_SCALING) && !defined(IN_VMSVGA3D)
+    /* Always allocate HiDPI-ready backing store for NSView, so we will be able change HiDPI scaling option in runtime. */
+    crDebug("HiDPI: Allocate big backing store for NSView. Up-scaling is currently %s.", render_spu.fUnscaledHiDPI ? "OFF" : "ON");
+    [self performSelector:@selector(setWantsBestResolutionOpenGLSurface:) withObject: (id)YES];
+#endif
+
+    COCOA_LOG_FLOW(("%s: returns self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+    return self;
+}
+
+- (void)cleanupData
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+
+#ifndef IN_VMSVGA3D
+    [self deleteDockTile];
+#endif
+
+    [self setGLCtx:nil];
+
+    if (m_pSharedGLCtx)
+    {
+        if ([m_pSharedGLCtx view] == self)
+            [m_pSharedGLCtx clearDrawable];
+
+        [m_pSharedGLCtx release];
+        m_pSharedGLCtx = nil;
+
+
+#ifndef IN_VMSVGA3D
+        CrBltTerm(m_pBlitter);
+        RTMemFree(m_pBlitter);
+        m_pBlitter = nil;
+#endif
+    }
+
+    [self clearVisibleRegions];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)dealloc
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+
+    [self cleanupData];
+    [super dealloc];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)drawRect:(NSRect)aRect
+{
+    COCOA_LOG_FLOW(("%s: self=%p aRect=%d,%d %d,%d\n", __PRETTY_FUNCTION__, (void *)self, (int)aRect.origin.x, (int)aRect.origin.y,
+                    (int)aRect.size.width, (int)aRect.size.height));
+
+    [self vboxTryDrawUI];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)setGLCtx:(NSOpenGLContext *)pCtx
+{
+    COCOA_LOG_FLOW(("%s: self=%p pCtx=%p (old=%p)\n", __PRETTY_FUNCTION__, (void *)self, (void *)pCtx, m_pGLCtx));
+
+    /*
+     * Only do something if the context changes.
+     */
+    if (m_pGLCtx != pCtx)
+    {
+        /* Ensure the context drawable is cleared to avoid holding a reference to inexistent view. */
+        if (m_pGLCtx)
+        {
+#ifdef IN_VMSVGA3D
+            Assert(!pCtx);
+#endif
+            [m_pGLCtx clearDrawable];
+            [m_pGLCtx release];
+            /*[m_pGLCtx performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO];*/
+        }
+
+        m_pGLCtx = pCtx;
+        if (pCtx)
+            [pCtx retain];
+    }
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (NSOpenGLContext *)glCtx
+{
+    COCOA_LOG_FLOW(("%s: self=%p returns %p\n", __PRETTY_FUNCTION__, (void *)self, (void *)m_pGLCtx));
+    return m_pGLCtx;
+}
+
+- (NSView *)parentView
+{
+    COCOA_LOG_FLOW(("%s: self=%p returns %p\n", __PRETTY_FUNCTION__, (void *)self, (void *)m_pParentView));
+    return m_pParentView;
+}
+
+- (void)setParentView:(NSView *)pView
+{
+    COCOA_LOG_FLOW(("%s: self=%p pView=%p (old=%p)\n", __PRETTY_FUNCTION__, (void *)self, (void *)pView, m_pParentView));
+
+    m_pParentView = pView;
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)setOverlayWin:(NSWindow *)pWin
+{
+    COCOA_LOG_FLOW(("%s: self=%p pWin=%p (old=%p)\n", __PRETTY_FUNCTION__, (void *)self, (void *)pWin, m_pOverlayWin));
+
+    m_pOverlayWin = pWin;
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (NSWindow *)overlayWin
+{
+    COCOA_LOG_FLOW(("%s: self=%p returns %p\n", __PRETTY_FUNCTION__, (void *)self, (void *)m_pOverlayWin));
+    return m_pOverlayWin;
+}
+
+- (void)vboxSetPosUI:(NSPoint)pos
+{
+    COCOA_LOG_FLOW(("%s: self=%p pos=%d,%d (old pos=%d,%d)\n", __PRETTY_FUNCTION__, (void *)self, (int)pos.x, (int)pos.y,
+                    (int)m_Pos.x, (int)m_Pos.y));
+
+    DEBUG_MSG(("vboxSetPosUI: [%d, %d].\n", (int)pos.x, (int)pos.y));
+
+    m_Pos = pos;
+
+    if (m_fEverSized)
+        [self vboxReshapePerform];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxSetPosUIObj:(NSValue *)pPos
+{
+    COCOA_LOG_FLOW(("%s: self=%p pPos=%p (%d,%d) (old pos=%d,%d)\n", __PRETTY_FUNCTION__, (void *)self, pPos,
+                    (int)[pPos pointValue].x, (int)[pPos pointValue].y, (int)m_Pos.x, (int)m_Pos.y));
+
+    NSPoint pos = [pPos pointValue];
+    [self vboxSetPosUI:pos];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxSetPos:(NSPoint)pos
+{
+    COCOA_LOG_FLOW(("%s: self=%p pos=%d,%d (old pos=%d,%d)\n", __PRETTY_FUNCTION__, (void *)self, (int)pos.x, (int)pos.y,
+                    (int)m_Pos.x, (int)m_Pos.y));
+
+    VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
+    NSValue *pPos =  [NSValue valueWithPoint:pos];
+    [pRunner addObj:self selector:@selector(vboxSetPosUIObj:) arg:pPos];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (NSPoint)pos
+{
+    COCOA_LOG_FLOW(("%s: self=%p returns %d,%d\n", __PRETTY_FUNCTION__, (void *)self, (int)m_Pos.x, (int)m_Pos.y));
+    return m_Pos;
+}
+
+- (bool)isEverSized
+{
+    COCOA_LOG_FLOW(("%s: self=%p returns %d\n", __PRETTY_FUNCTION__, (void *)self, m_fEverSized));
+    return m_fEverSized;
+}
+
+- (void)vboxDestroy
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+    BOOL        fIsMain = [NSThread isMainThread];
+    NSWindow   *pWin    = nil;
+
+    Assert(fIsMain);
+
+    /* Hide the view early. */
+    [self setHidden: YES];
+
+    pWin = [self window];
+    [[NSNotificationCenter defaultCenter] removeObserver:pWin];
+    [pWin setContentView: nil];
+    [[pWin parentWindow] removeChildWindow: pWin];
+
+    if (fIsMain)
+        [pWin release];
+    else
+    {
+        /* We can NOT run synchronously with the main thread since this may lead to a deadlock,
+           caused by main thread waiting xpcom thread, xpcom thread waiting to main hgcm thread,
+           and main hgcm thread waiting for us, this is why use waitUntilDone:NO,
+           which should cause no harm. */
+        [pWin performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO];
+    }
+
+    [self cleanupData];
+
+    if (fIsMain)
+        [self release];
+    else
+    {
+        /* We can NOT run synchronously with the main thread since this may lead to a deadlock,
+           caused by main thread waiting xpcom thread, xpcom thread waiting to main hgcm thread,
+           and main hgcm thread waiting for us, this is why use waitUntilDone:NO.
+           We need to avoid concurrency though, so we cleanup some data right away via a cleanupData call. */
+        [self performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO];
+    }
+
+#ifndef IN_VMSVGA3D
+    renderspuWinRelease(m_pWinInfo);
+#endif
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxSetSizeUIObj:(NSValue *)pSize
+{
+    COCOA_LOG_FLOW(("%s: self=%p pSize=%p (%d,%d)\n", __PRETTY_FUNCTION__, (void *)self, (void *)pSize,
+                    (int)[pSize sizeValue].width, (int)[pSize sizeValue].height));
+
+    NSSize size = [pSize sizeValue];
+    [self vboxSetSizeUI:size];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxSetSizeUI:(NSSize)size
+{
+    COCOA_LOG_FLOW(("%s: self=%p size=%d,%d\n", __PRETTY_FUNCTION__, (void *)self, (int)size.width, (int)size.height));
+
+    m_Size = size;
+    m_fEverSized = true;
+
+    DEBUG_MSG(("OVIW(%p): vboxSetSize: new size: %dx%d\n", (void *)self, (int)m_Size.width, (int)m_Size.height));
+    [self vboxReshapeOnResizePerform];
+
+    /* ensure window contents is updated after that */
+    [self vboxTryDrawUI];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxSetSize:(NSSize)size
+{
+    COCOA_LOG_FLOW(("%s: self=%p size=%d,%d\n", __PRETTY_FUNCTION__, (void *)self, (int)size.width, (int)size.height));
+
+    VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
+    NSValue *pSize = [NSValue valueWithSize:size];
+    [pRunner addObj:self selector:@selector(vboxSetSizeUIObj:) arg:pSize];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (NSSize)size
+{
+    COCOA_LOG_FLOW(("%s: self=%p returns %d,%d\n", __PRETTY_FUNCTION__, (void *)self, (int)m_Size.width, (int)m_Size.height));
+    return m_Size;
+}
+
+- (void)updateViewportCS
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+
+    /* Update the viewport for our OpenGL view. */
+    [m_pSharedGLCtx update];
+
+#ifndef IN_VMSVGA3D
+    [self vboxBlitterSyncWindow];
+#endif
+
+    /* Clear background to transparent. */
+    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxReshapeOnResizePerform
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+
+    [self vboxReshapePerform];
+#ifndef IN_VMSVGA3D
+    [self createDockTile];
+#endif
+
+    /* have to rebind GL_TEXTURE_RECTANGLE_ARB as m_FBOTexId could be changed in updateFBO call */
+    m_fNeedViewportUpdate = true;
+#if 0
+    pCurCtx = [NSOpenGLContext currentContext];
+    if (pCurCtx && pCurCtx == m_pGLCtx && (pCurView = [pCurCtx view]) == self)
+    {
+        [m_pGLCtx update];
+        m_fNeedCtxUpdate = false;
+    }
+    else
+    {
+        /* do it in a lazy way */
+        m_fNeedCtxUpdate = true;
+    }
+#endif
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxReshapeOnReparentPerform
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+    [self vboxReshapePerform];
+#ifndef IN_VMSVGA3D
+    [self createDockTile];
+#endif
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+#ifdef VBOX_WITH_CONFIGURABLE_HIDPI_SCALING
+- (NSRect)safeConvertRectToBacking:(NSRect *)pRect
+{
+    NSRect resultingRect = NSZeroRect;
+
+    NSWindow *pWindow = [m_pParentView window];
+    if (pWindow)
+    {
+        if ([pWindow respondsToSelector:@selector(convertRectToBacking:)])
+        {
+            NSMethodSignature *pSignature = [pWindow methodSignatureForSelector:@selector(convertRectToBacking:)];
+            if (pSignature)
+            {
+                NSInvocation *pInvocation = [NSInvocation invocationWithMethodSignature:pSignature];
+                if (pInvocation)
+                {
+                    [pInvocation setSelector:@selector(convertRectToBacking:)];
+                    [pInvocation setTarget:pWindow];
+                    [pInvocation setArgument:pRect atIndex:2];
+                    [pInvocation invoke];
+                    [pInvocation getReturnValue:&resultingRect];
+
+                    DEBUG_MSG(("safeConvertRectToBacking: convert [X, Y, WxH]: [%d, %d, %dx%d] -> [%d, %d, %dx%d]\n",
+                        (int)pRect       ->origin.x, (int)pRect       ->origin.y, (int)pRect       ->size.width, (int)pRect       ->size.width,
+                        (int)resultingRect.origin.x, (int)resultingRect.origin.y, (int)resultingRect.size.width, (int)resultingRect.size.width));
+
+                    return resultingRect;
+                }
+            }
+        }
+    }
+    else
+        /* Should never happen. */
+        DEBUG_WARN(("safeConvertRectToBacking: parent widget has no window.\n"));
+
+    resultingRect = *pRect;
+
+    DEBUG_MSG(("safeConvertRectToBacking (reurn as is): convert [X, Y, WxH]: [%d, %d, %dx%d] -> [%d, %d, %dx%d]\n",
+        (int)pRect       ->origin.x, (int)pRect       ->origin.y, (int)pRect       ->size.width, (int)pRect       ->size.width,
+        (int)resultingRect.origin.x, (int)resultingRect.origin.y, (int)resultingRect.size.width, (int)resultingRect.size.width));
+
+    return resultingRect;
+}
+
+
+- (CGFloat)safeGetBackingScaleFactor
+{
+    /* Assume its default value. */
+    CGFloat backingScaleFactor = 1.;
+
+    NSWindow *pWindow = [m_pParentView window];
+    if (pWindow)
+    {
+        NSScreen *pScreen = [pWindow screen];
+        if (pScreen)
+        {
+            if ([pScreen respondsToSelector:@selector(backingScaleFactor)])
+            {
+                NSMethodSignature *pSignature = [pScreen methodSignatureForSelector:@selector(backingScaleFactor)];
+                if (pSignature)
+                {
+                    NSInvocation *pInvocation = [NSInvocation invocationWithMethodSignature:pSignature];
+                    if (pInvocation)
+                    {
+                        [pInvocation setSelector:@selector(backingScaleFactor)];
+                        [pInvocation setTarget:pScreen];
+                        [pInvocation invoke];
+                        [pInvocation getReturnValue:&backingScaleFactor];
+
+                        DEBUG_MSG(("safeGetBackingScaleFactor: %d\n", (int)backingScaleFactor));
+
+                        return backingScaleFactor;
+                    }
+                    else
+                        DEBUG_WARN(("safeGetBackingScaleFactor: unable to create invocation for backingScaleFactor method signature.\n"));
+                }
+                else
+                    DEBUG_WARN(("safeGetBackingScaleFactor: unable to create method signature for backingScaleFactor selector.\n"));
+            }
+            else
+                DEBUG_WARN(("safeGetBackingScaleFactor: NSScreen does not respond to backingScaleFactor selector.\n"));
+        }
+        else
+            /* Should never happen. */
+            DEBUG_WARN(("safeGetBackingScaleFactor: parent window has no screen.\n"));
+    }
+    else
+        /* Should never happen. */
+        DEBUG_WARN(("safeGetBackingScaleFactor: parent widget has no window.\n"));
+
+    return backingScaleFactor;
+}
+
+#endif
+
+
+- (NSRect)safeConvertToScreen:(NSRect *)pRect
+{
+    NSRect resultingRect = NSZeroRect;
+
+    NSWindow *pWindow = [m_pParentView window];
+    if (pWindow)
+    {
+        if ([pWindow respondsToSelector:@selector(convertRectToScreen:)])
+        {
+            NSMethodSignature *pSignature = [pWindow methodSignatureForSelector:@selector(convertRectToScreen:)];
+            if (pSignature)
+            {
+                NSInvocation *pInvocation = [NSInvocation invocationWithMethodSignature:pSignature];
+                if (pInvocation)
+                {
+                    [pInvocation setSelector:@selector(convertRectToScreen:)];
+                    [pInvocation setTarget:pWindow];
+                    [pInvocation setArgument:pRect atIndex:2];
+                    [pInvocation invoke];
+                    [pInvocation getReturnValue:&resultingRect];
+
+                    DEBUG_MSG(("safeConvertToScreen: convert [X, Y, WxH]: [%d, %d, %dx%d] -> [%d, %d, %dx%d]\n",
+                        (int)pRect       ->origin.x, (int)pRect       ->origin.y, (int)pRect       ->size.width, (int)pRect       ->size.width,
+                        (int)resultingRect.origin.x, (int)resultingRect.origin.y, (int)resultingRect.size.width, (int)resultingRect.size.width));
+
+                    return resultingRect;
+                }
+            }
+        }
+
+        /* If we failed, let's use deprecated @selector(convertBaseToScreen:). It is a bit hacky,
+         * but what to do if we stick to SDK 10.6. */
+        resultingRect.origin = [[m_pParentView window] convertBaseToScreen:pRect->origin];
+        resultingRect.size   = pRect->size;
+    }
+    else
+        /* Should never happen. */
+        DEBUG_WARN(("safeConvertToScreen: parent widget has no window.\n"));
+
+    DEBUG_MSG(("safeConvertToScreen (deprecated method): convert [X, Y, WxH]: [%d, %d, %dx%d] -> [%d, %d, %dx%d]\n",
+        (int)pRect       ->origin.x, (int)pRect       ->origin.y, (int)pRect       ->size.width, (int)pRect       ->size.width,
+        (int)resultingRect.origin.x, (int)resultingRect.origin.y, (int)resultingRect.size.width, (int)resultingRect.size.width));
+
+    return resultingRect;
+}
+
+- (void)vboxReshapePerform
+{
+#ifndef IN_VMSVGA3D
+    COCOA_LOG_FLOW(("%s: self=%p - m_DockTileView=%p\n", __PRETTY_FUNCTION__, (void *)self, (void *)m_DockTileView));
+#else
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+#endif
+
+    /* NOTE: Please consider the next naming convention for variables.
+     *
+     * Rectangle variables:
+     *
+     *      <object to represent><coordinate system>:
+     *          <object to represent>:
+     *              parentFrame - a frame of the parent container (NSView) object
+     *              childFrame  - a frame required to display guest content
+     *              windowFrame - resulting window frame constructed as an intersection of parentFrame and childFrame
+     *          <coordinate system>:
+     *              VCS - View Coordinate System
+     *              WCS - Window Coordinate System
+     *              SCS - Screen Coordinate System
+     *
+     * The same convention applied to offset variables naming as well which are of format:
+     *
+     *      <object to represent><coordinate><coordinate system>.
+     *
+     * https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaDrawingGuide/Transforms/Transforms.html
+     */
+
+    NSRect parentFrameVCS, parentFrameWCS, parentFrameSCS;
+    NSRect childFrameWCS, childFrameSCS;
+    NSRect windowFrameSCS;
+
+    CGFloat childFrameXWCS, childFrameYWCS;
+
+    /* We need to construct a new window frame (windowFrameSCS) for entire NSWindow object in
+     * screen coordinates. In order to make 3D overlay window to do not overlap Cocoa and Qt GUI elements (titlebar,
+     * Qt statusbar, scroll bars etc) let's do the next. Get parent view visible area (parentFrameSCS) in (NS)Screen
+     * coordinates. Then get the area required to diaplay guest content (childFrameSCS) in (NS)Screen coordinates as well.
+     * The intersection of these two areas in screen coordinates will be a new frame for entire NSWindow object. */
+
+    parentFrameVCS = [m_pParentView frame];
+    parentFrameWCS = [m_pParentView convertRect:parentFrameVCS toView:nil];
+    parentFrameSCS = [self safeConvertToScreen:&parentFrameWCS];
+
+    /* Choose childFrame origin in a bit special way. Its pop-left corner should stick to its parent top-left corner. */
+    childFrameXWCS = parentFrameWCS.origin.x + m_Pos.x;
+    childFrameYWCS = parentFrameWCS.origin.y - m_Pos.y - (m_Size.height - parentFrameWCS.size.height);
+    childFrameWCS  = NSMakeRect(childFrameXWCS, childFrameYWCS, m_Size.width, m_Size.height);
+    childFrameSCS  = [self safeConvertToScreen:&childFrameWCS];
+
+    windowFrameSCS = NSIntersectionRect(parentFrameSCS, childFrameSCS);
+
+    DEBUG_MSG(("vboxReshapePerform: a new overlay frame [%d, %d, %dx%d] has been constructed from intersection of window frame "
+               "[%d, %d, %dx%d] and guest content rectangle [%d, %d, %dx%d]; m_Pos=[%d, %d], m_Size=%dx%d.\n",
+               (int)windowFrameSCS.origin.x, (int)windowFrameSCS.origin.y, (int)windowFrameSCS.size.width, (int)windowFrameSCS.size.width,
+               (int)parentFrameSCS.origin.x, (int)parentFrameSCS.origin.y, (int)parentFrameSCS.size.width, (int)parentFrameSCS.size.width,
+               (int)childFrameSCS .origin.x, (int)childFrameSCS .origin.y, (int)childFrameSCS .size.width, (int)childFrameSCS .size.width,
+               (int)m_Pos.x, (int)m_Pos.y, (int)m_Size.width, (int)m_Size.height));
+
+    /** @todo galitsyn: drop this!
+     * Later we have to correct the texture position in the case the window is
+     * out of the parents window frame. So save the shift values for later use. */
+    m_RootRect.origin.x = windowFrameSCS.origin.x - childFrameSCS.origin.x;
+    m_RootRect.origin.y =  childFrameSCS.size.height + childFrameSCS.origin.y - (windowFrameSCS.size.height + windowFrameSCS.origin.y);
+    m_RootRect.size = windowFrameSCS.size;
+    m_yInvRootOffset = windowFrameSCS.origin.y - childFrameSCS.origin.y;
+
+    DEBUG_MSG(("vboxReshapePerform: [%#p]: m_RootRect pos[%d : %d] size[%d : %d]\n",
+               (void *)self, (int)m_RootRect.origin.x, (int)m_RootRect.origin.y, (int)m_RootRect.size.width, (int)m_RootRect.size.height));
+
+    /* Set the new frame. */
+    [[self window] setFrame:windowFrameSCS display:YES];
+
+#ifndef IN_VMSVGA3D
+    /* Inform the dock tile view as well. */
+    [self reshapeDockTile];
+#endif
+
+    /* Make sure the context is updated accordingly. */
+    /* [self updateViewport]; */
+    if (m_pSharedGLCtx)
+    {
+        VBOX_CR_RENDER_CTX_INFO CtxInfo;
+        vboxCtxEnter(m_pSharedGLCtx, &CtxInfo);
+
+        [self updateViewportCS];
+
+        vboxCtxLeave(&CtxInfo);
+    }
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+#ifndef IN_VMSVGA3D
+
+- (void)createDockTile
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+    NSView *pDockScreen = nil;
+
+    [self deleteDockTile];
+
+    /* Is there a dock tile preview enabled in the GUI? If so setup a
+     * additional thumbnail view for the dock tile. */
+    pDockScreen = [self dockTileScreen];
+    if (pDockScreen)
+    {
+        m_DockTileView = [[DockOverlayView alloc] init];
+        [self reshapeDockTile];
+        [pDockScreen addSubview:m_DockTileView];
+    }
+
+    COCOA_LOG_FLOW(("%s: returns - m_DockTileView\n", __PRETTY_FUNCTION__, (void *)m_DockTileView));
+}
+
+- (void)deleteDockTile
+{
+    COCOA_LOG_FLOW(("%s: self=%p - m_DockTileView=%p\n", __PRETTY_FUNCTION__, (void *)self, (void *)m_DockTileView));
+
+    if (m_DockTileView != nil)
+    {
+        [m_DockTileView removeFromSuperview];
+        [m_DockTileView release];
+        m_DockTileView = nil;
+    }
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+#endif /* !IN_VMSVGA3D */
+
+- (void)makeCurrentFBO
+{
+    COCOA_LOG_FLOW(("%s: self=%p - m_pGLCtx=%p m_fNeedCtxUpdate=%d\n", __PRETTY_FUNCTION__, (void *)self,
+                    (void *)m_pGLCtx, m_fNeedCtxUpdate));
+
+    if (m_pGLCtx)
+    {
+        NSOpenGLContext *pPrevCtx = [NSOpenGLContext currentContext];
+
+#ifdef IN_VMSVGA3D
+        /* Always flush before flush. glXMakeCurrent and wglMakeCurrent does this
+           implicitly, seemingly NSOpenGLContext::makeCurrentContext doesn't. */
+        if (pPrevCtx != nil)
+        {
+            DEBUG_CLEAR_GL_ERRORS();
+            glFlush();
+            DEBUG_CHECK_GL_ERROR("glFlush");
+        }
+#endif
+
+        if ([m_pGLCtx view] != self)
+        {
+#ifndef IN_VMSVGA3D
+            /* We change the active view, so flush first */
+            if (pPrevCtx != nil)
+                glFlush();
+#endif
+            DEBUG_CLEAR_GL_ERRORS();
+            [m_pGLCtx setView: self];
+            DEBUG_CHECK_GL_ERROR("setView");
+        }
+
+#if 0
+        if (pPrevCtx != m_pGLCtx)
+#endif
+        {
+            DEBUG_CLEAR_GL_ERRORS();
+            [m_pGLCtx makeCurrentContext];
+            DEBUG_CHECK_GL_ERROR("makeCurrentContext");
+            Assert([NSOpenGLContext currentContext] == m_pGLCtx);
+            Assert([m_pGLCtx view] == self);
+        }
+
+        if (m_fNeedCtxUpdate == true)
+        {
+            [m_pGLCtx update];
+            m_fNeedCtxUpdate = false;
+        }
+
+        if (!m_FBOId)
+        {
+            glGenFramebuffersEXT(1, &m_FBOId);
+            Assert(m_FBOId);
+        }
+    }
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (bool)vboxSharedCtxCreate
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+
+    if (m_pSharedGLCtx)
+    {
+        COCOA_LOG_FLOW(("%s: returns true (m_pSharedGLCtx=%p)\n", __PRETTY_FUNCTION__, (void *)m_pSharedGLCtx));
+        return true;
+    }
+
+#ifndef IN_VMSVGA3D
+    Assert(!m_pBlitter);
+    m_pBlitter = RTMemAlloc(sizeof(*m_pBlitter));
+    if (RT_UNLIKELY(!m_pBlitter))
+    {
+        DEBUG_WARN(("m_pBlitter allocation failed"));
+        COCOA_LOG_FLOW(("%s: returns false - m_pBlitter allocation failed\n", __PRETTY_FUNCTION__));
+        return false;
+    }
+
+    int rc = CrBltInit(m_pBlitter, NULL, false /*fCreateNewCtx*/, false /*fForceDrawBlt*/,
+                       &render_spu.GlobalShaders, &render_spu.blitterDispatch);
+    if (RT_FAILURE(rc))
+    {
+        DEBUG_WARN(("CrBltInit failed, rc %d", rc));
+        RTMemFree(m_pBlitter);
+        m_pBlitter = NULL;
+
+        COCOA_LOG_FLOW(("%s: returns false - CrBltInit failed with rc=%Rrc\n", __PRETTY_FUNCTION__, rc));
+        return false;
+    }
+
+    COCOA_LOG_FLOW(("%s: blitter (%p) created successfully for view 0x%p\n", (void *)m_pBlitter, (void *)self));
+#endif /* !IN_VMSVGA3D */
+
+    /* Create a shared context out of the main context. Use the same pixel format. */
+    NSOpenGLPixelFormat *pPixelFormat = [(OverlayOpenGLContext *)m_pGLCtx openGLPixelFormat];
+    NSOpenGLContext     *pSharedGLCtx = [[NSOpenGLContext alloc] initWithFormat:pPixelFormat shareContext:m_pGLCtx];
+
+    /* Set the new context as non opaque */
+    GLint opaque = 0;
+    [pSharedGLCtx setValues:&opaque forParameter:NSOpenGLCPSurfaceOpacity];
+
+    /* Set this view as the drawable for the new context */
+    [pSharedGLCtx setView:self];
+    m_fNeedViewportUpdate = true;
+
+    m_pSharedGLCtx = pSharedGLCtx;
+
+    COCOA_LOG_FLOW(("%s: returns true - new m_pSharedGLCtx=%p\n", __PRETTY_FUNCTION__, (void *)m_pSharedGLCtx));
+    return true;
+}
+
+- (void)vboxTryDraw
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+
+    glFlush();
+
+    /* Issue to the gui thread. */
+    [self performSelectorOnMainThread:@selector(vboxTryDrawUI) withObject:nil waitUntilDone:NO];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxSetVisible:(GLboolean)fVisible
+{
+    COCOA_LOG_FLOW(("%s: self=%p fVisible=%d\n", __PRETTY_FUNCTION__, (void *)self, fVisible));
+
+    VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
+    NSNumber *pVisObj = [NSNumber numberWithBool:fVisible];
+    [pRunner addObj:self selector:@selector(vboxSetVisibleUIObj:) arg:pVisObj];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxSetVisibleUI:(GLboolean)fVisible
+{
+    COCOA_LOG_FLOW(("%s: self=%p fVisible=%d\n", __PRETTY_FUNCTION__, (void *)self, fVisible));
+
+    [self setHidden: !fVisible];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxSetVisibleUIObj:(NSNumber *)pVisibleObj
+{
+    COCOA_LOG_FLOW(("%s: self=%p pVisibleObj=%p(%d)\n", __PRETTY_FUNCTION__,
+                    (void *)self, (void *)pVisibleObj, [pVisibleObj boolValue]));
+
+    BOOL fVisible = [pVisibleObj boolValue];
+    [self vboxSetVisibleUI:fVisible];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxReparent:(NSView *)pParentView
+{
+    COCOA_LOG_FLOW(("%s: self=%p pParentView=%p\n", __PRETTY_FUNCTION__, (void *)self, (void *)pParentView));
+
+    VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
+    [pRunner addObj:self selector:@selector(vboxReparentUI:) arg:pParentView];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxReparentUI:(NSView *)pParentView
+{
+    COCOA_LOG_FLOW(("%s: self=%p pParentView=%p\n", __PRETTY_FUNCTION__, (void *)self, (void *)pParentView));
+
+    /* Make sure the window is removed from any previous parent window. */
+    if ([[self overlayWin] parentWindow] != nil)
+    {
+        [[[self overlayWin] parentWindow] removeChildWindow:[self overlayWin]];
+    }
+
+    /* Set the new parent view */
+    [self setParentView: pParentView];
+
+    /* Add the overlay window as a child to the new parent window */
+    if (pParentView != nil)
+    {
+        [[pParentView window] addChildWindow:[self overlayWin] ordered:NSWindowAbove];
+        if ([self isEverSized])
+            [self vboxReshapeOnReparentPerform];
+    }
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxTryDrawUI
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+
+    if ([self isHidden])
+    {
+        COCOA_LOG_FLOW(("%s: returns - request to draw on a hidden view\n", __PRETTY_FUNCTION__));
+        return;
+    }
+
+    if ([[self overlayWin] parentWindow] == nil)
+    {
+        COCOA_LOG_FLOW(("%s: returns - request to draw a view w/o a parent\n", __PRETTY_FUNCTION__));
+        return;
+    }
+
+#ifdef IN_VMSVGA3D
+    if (!m_pSharedGLCtx)
+    {
+        Assert(!m_fDataVisible);
+        Assert(!m_fCleanupNeeded);
+        if (![self vboxSharedCtxCreate])
+        {
+            COCOA_LOG_FLOW(("%s: returns - vboxSharedCtxCreate failed\n", __PRETTY_FUNCTION__));
+            return;
+        }
+        Assert(m_pSharedGLCtx);
+    }
+#endif
+
+    const VBOXVR_SCR_COMPOSITOR *pCompositor = NULL;
+#ifndef IN_VMSVGA3D
+    int rc = renderspuVBoxCompositorLock(m_pWinInfo, &pCompositor);
+    if (RT_FAILURE(rc))
+    {
+        COCOA_LOG_FLOW(("%s: returns - renderspuVBoxCompositorLock failed (%Rrc)\n", __PRETTY_FUNCTION__, rc));
+        return;
+    }
+
+    if (!pCompositor && !m_fCleanupNeeded)
+    {
+        renderspuVBoxCompositorUnlock(m_pWinInfo);
+        COCOA_LOG_FLOW(("%s: returns - noCompositorUI\n", __PRETTY_FUNCTION__));
+        return;
+    }
+
+    VBOXVR_SCR_COMPOSITOR TmpCompositor;
+    if (pCompositor)
+    {
+        if (!m_pSharedGLCtx)
+        {
+            Assert(!m_fDataVisible);
+            Assert(!m_fCleanupNeeded);
+            renderspuVBoxCompositorRelease(m_pWinInfo);
+            if (![self vboxSharedCtxCreate])
+            {
+                COCOA_LOG_FLOW(("%s: returns - vboxSharedCtxCreate failed\n", __PRETTY_FUNCTION__));
+                return;
+            }
+
+            Assert(m_pSharedGLCtx);
+
+            pCompositor = renderspuVBoxCompositorAcquire(m_pWinInfo);
+            Assert(!m_fDataVisible);
+            Assert(!m_fCleanupNeeded);
+            if (!pCompositor)
+            {
+                COCOA_LOG_FLOW(("%s: returns - Failed to reacquire compositor\n", __PRETTY_FUNCTION__));
+                return;
+            }
+        }
+    }
+    else
+    {
+        DEBUG_MSG(("%s: NeedCleanup\n", __PRETTY_FUNCTION__));
+        Assert(m_fCleanupNeeded);
+        CrVrScrCompositorInit(&TmpCompositor, NULL);
+        pCompositor = &TmpCompositor;
+    }
+#endif /* !IN_VMSVGA3D */
+
+
+    if ([self lockFocusIfCanDraw])
+    {
+        COCOA_LOG_FLOW(("%s: Calling vboxPresent\n", __PRETTY_FUNCTION__));
+        [self vboxPresent:pCompositor];
+        [self unlockFocus];
+    }
+#ifndef IN_VMSVGA3D /** @todo VMSVGA3 */
+    else if (!m_pWinInfo->visible)
+    {
+        COCOA_LOG_FLOW(("%s: NotVisible\n", __PRETTY_FUNCTION__));
+        m_fCleanupNeeded = false;
+    }
+#endif
+    else
+    {
+        COCOA_LOG_FLOW(("%s: Reschedule\n", __PRETTY_FUNCTION__));
+        [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(vboxTryDrawUI) userInfo:nil repeats:NO];
+    }
+
+#ifndef IN_VMSVGA3D
+    renderspuVBoxCompositorUnlock(m_pWinInfo);
+#endif
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)swapFBO
+{
+    COCOA_LOG_FLOW(("%s: self=%p - m_pGLCtx=%p\n", __PRETTY_FUNCTION__, (void *)self, (void *)m_pGLCtx));
+    [m_pGLCtx flushBuffer];
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxPresent:(PCVBOXVR_SCR_COMPOSITOR)pCompositor
+{
+    COCOA_LOG_FLOW(("%s: self=%p pCompositor=%p\n", __PRETTY_FUNCTION__, (void *)self, (void *)pCompositor));
+    /*DEBUG_MSG(("OVIW(%p): renderFBOToView\n", (void *)self));*/
+#ifndef IN_VMSVGA3D
+    AssertPtr(pCompositor);
+#endif
+
+    VBOX_CR_RENDER_CTX_INFO CtxInfo;
+    vboxCtxEnter(m_pSharedGLCtx, &CtxInfo);
+
+    [self vboxPresentCS:pCompositor];
+
+    vboxCtxLeave(&CtxInfo);
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)vboxPresentCS:(PCVBOXVR_SCR_COMPOSITOR)pCompositor
+{
+    COCOA_LOG_FLOW(("%s: self=%p pCompositor=%p\n", __PRETTY_FUNCTION__, (void *)self, (void *)pCompositor));
+    if ([m_pSharedGLCtx view] != self)
+    {
+        COCOA_LOG_FLOW(("%s: Not current view of shared ctx! Switching... (self=%p, view=%p, m_pSharedGLCtx)\n",
+                        __PRETTY_FUNCTION__, (void *)self, (void *)[m_pSharedGLCtx view], (void *)m_pSharedGLCtx));
+        [m_pSharedGLCtx setView: self];
+        m_fNeedViewportUpdate = true;
+    }
+
+    if (m_fNeedViewportUpdate)
+    {
+        [self updateViewportCS];
+        m_fNeedViewportUpdate = false;
+    }
+
+    m_fCleanupNeeded = false;
+
+#ifndef IN_VMSVGA3D
+    /* Render FBO content to the dock tile when necessary. */
+    [self vboxPresentToDockTileCS:pCompositor];
+#endif
+
+    /* change to #if 0 to see thumbnail image */
+#if 1
+    [self vboxPresentToViewCS:pCompositor];
+#else
+    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+    [m_pSharedGLCtx flushBuffer];
+#endif
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+DECLINLINE(void) vboxNSRectToRect(const NSRect *pR, RTRECT *pRect)
+{
+    pRect->xLeft   = (int)pR->origin.x;
+    pRect->yTop    = (int)pR->origin.y;
+    pRect->xRight  = (int)(pR->origin.x + pR->size.width);
+    pRect->yBottom = (int)(pR->origin.y + pR->size.height);
+}
+
+DECLINLINE(void) vboxNSRectToRectUnstretched(const NSRect *pR, RTRECT *pRect, float xStretch, float yStretch)
+{
+    pRect->xLeft   = (int)(pR->origin.x / xStretch);
+    pRect->yTop    = (int)(pR->origin.y / yStretch);
+    pRect->xRight  = (int)((pR->origin.x + pR->size.width) / xStretch);
+    pRect->yBottom = (int)((pR->origin.y + pR->size.height) / yStretch);
+}
+
+DECLINLINE(void) vboxNSRectToRectStretched(const NSRect *pR, RTRECT *pRect, float xStretch, float yStretch)
+{
+    pRect->xLeft   = (int)(pR->origin.x * xStretch);
+    pRect->yTop    = (int)(pR->origin.y * yStretch);
+    pRect->xRight  = (int)((pR->origin.x + pR->size.width) * xStretch);
+    pRect->yBottom = (int)((pR->origin.y + pR->size.height) * yStretch);
+}
+
+- (void)vboxPresentToViewCS:(PCVBOXVR_SCR_COMPOSITOR)pCompositor
+{
+    NSRect r = [self frame];
+    COCOA_LOG_FLOW(("%s: self=%p - r={%d,%d %d,%d}\n", __PRETTY_FUNCTION__, (void *)self,
+                    (int)r.origin.x, (int)r.origin.y, (int)r.size.width, (int)r.size.height));
+
+#if 1 /* Set to 0 to see the docktile instead of the real output */
+    float backingStretchFactor = 1.;
+#  if defined(VBOX_WITH_CONFIGURABLE_HIDPI_SCALING) && !defined(IN_VMSVGA3D)
+    /* Adjust viewport according to current NSView's backing store parameters. */
+    if (render_spu.fUnscaledHiDPI)
+    {
+        /* Update stretch factor in order to satisfy current NSView's backing store parameters. */
+        backingStretchFactor = [self safeGetBackingScaleFactor];
+    }
+
+    NSRect regularBounds = [self bounds];
+    NSRect backingBounds = [self safeConvertRectToBacking:&regularBounds];
+    glViewport(0, 0, backingBounds.size.width, backingBounds.size.height);
+
+    //crDebug("HiDPI: vboxPresentToViewCS: up-scaling is %s (backingStretchFactor=%d).",
+    //    render_spu.fUnscaledHiDPI ? "OFF" : "ON", (int)backingStretchFactor);
+#  endif
+
+    glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0);
+    glDrawBuffer(GL_BACK);
+
+    /* Clear background to transparent */
+    glClear(GL_COLOR_BUFFER_BIT);
+
+    m_fDataVisible = false;
+
+# ifndef IN_VMSVGA3D
+    float xStretch;
+    float yStretch;
+    CrVrScrCompositorGetStretching(pCompositor, &xStretch, &yStretch);
+
+    VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR CIter;
+    const VBOXVR_SCR_COMPOSITOR_ENTRY *pEntry;
+    CrVrScrCompositorConstIterInit(pCompositor, &CIter);
+
+    while ((pEntry = CrVrScrCompositorConstIterNext(&CIter)) != NULL)
+    {
+        uint32_t cRegions;
+        const RTRECT *paSrcRegions, *paDstRegions;
+        int rc = CrVrScrCompositorEntryRegionsGet(pCompositor, pEntry, &cRegions, &paSrcRegions, &paDstRegions, NULL);
+        uint32_t fFlags = CrVrScrCompositorEntryFlagsCombinedGet(pCompositor, pEntry);
+        if (RT_SUCCESS(rc))
+        {
+            rc = CrBltEnter(m_pBlitter);
+            if (RT_SUCCESS(rc))
+            {
+                uint32_t i;
+                for (i = 0; i < cRegions; ++i)
+                {
+                    const CR_TEXDATA *pTexData;
+                    PCRTRECT pSrcRect = &paSrcRegions[i];
+                    PCRTRECT pDstRect = &paDstRegions[i];
+                    RTRECT   DstRect, RestrictDstRect;
+                    RTRECT   SrcRect, RestrictSrcRect;
+
+                    vboxNSRectToRect(&m_RootRect, &RestrictDstRect);
+                    VBoxRectIntersected(&RestrictDstRect, pDstRect, &DstRect);
+
+                    if (VBoxRectIsZero(&DstRect))
+                        continue;
+
+                    VBoxRectTranslate(&DstRect, -RestrictDstRect.xLeft, -RestrictDstRect.yTop);
+
+                    vboxNSRectToRectUnstretched(&m_RootRect, &RestrictSrcRect, xStretch / backingStretchFactor, yStretch / backingStretchFactor);
+                    VBoxRectTranslate(&RestrictSrcRect,
+                                      -CrVrScrCompositorEntryRectGet(pEntry)->xLeft,
+                                      -CrVrScrCompositorEntryRectGet(pEntry)->yTop);
+                    VBoxRectIntersected(&RestrictSrcRect, pSrcRect, &SrcRect);
+
+                    if (VBoxRectIsZero(&SrcRect))
+                        continue;
+
+                    pSrcRect = &SrcRect;
+                    pDstRect = &DstRect;
+
+                    pTexData = CrVrScrCompositorEntryTexGet(pEntry);
+
+                    CrBltBlitTexMural(m_pBlitter, true, CrTdTexGet(pTexData), pSrcRect, pDstRect, 1, fFlags | CRBLT_F_NOALPHA);
+
+                    m_fDataVisible = true;
+                }
+                CrBltLeave(m_pBlitter);
+            }
+            else
+            {
+                DEBUG_WARN(("CrBltEnter failed rc %d", rc));
+#  ifndef DEBUG_VERBOSE
+                AssertMsgFailed(("CrBltEnter failed rc %Rrc", rc));
+#  endif
+            }
+        }
+        else
+        {
+            AssertMsgFailed(("BlitStretched: CrVrScrCompositorEntryRegionsGet failed rc %Rrc\n", rc));
+            DEBUG_MSG_1(("BlitStretched: CrVrScrCompositorEntryRegionsGet failed rc %d\n", rc));
+        }
+    }
+# endif /* !IN_VMSVGA3D */
+#endif
+
+    /*
+    glFinish();
+    */
+    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+    [m_pSharedGLCtx flushBuffer];
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+- (void)presentComposition:(PCVBOXVR_SCR_COMPOSITOR_ENTRY)pChangedEntry
+{
+    COCOA_LOG_FLOW(("%s: self=%p pChangedEntry=%p\n", __PRETTY_FUNCTION__, (void *)self, (void *)pChangedEntry));
+    [self vboxTryDraw];
+}
+
+#ifndef IN_VMSVGA3D
+- (void)vboxBlitterSyncWindow
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+    CR_BLITTER_WINDOW   WinInfo;
+    NSRect              r;
+
+    if (!m_pBlitter)
+        return;
+
+    RT_ZERO(WinInfo);
+
+    r = [self frame];
+    WinInfo.width = r.size.width;
+    WinInfo.height = r.size.height;
+
+    Assert(WinInfo.width == m_RootRect.size.width);
+    Assert(WinInfo.height == m_RootRect.size.height);
+
+    /*CrBltMuralSetCurrentInfo(m_pBlitter, NULL);*/
+
+    CrBltMuralSetCurrentInfo(m_pBlitter, &WinInfo);
+    CrBltCheckUpdateViewport(m_pBlitter);
+}
+#endif /* !IN_VMSVGA3D */
+
+#ifndef IN_VMSVGA3D
+# ifdef VBOX_WITH_CRDUMPER_THUMBNAIL
+static int g_cVBoxTgaCtr = 0;
+# endif
+- (void)vboxPresentToDockTileCS:(PCVBOXVR_SCR_COMPOSITOR)pCompositor
+{
+    COCOA_LOG_FLOW(("%s: self=%p pCompositor=%p\n", __PRETTY_FUNCTION__, (void *)self, (void *)pCompositor));
+    NSRect      r   = [self frame];
+    NSRect      rr  = NSZeroRect;
+    NSDockTile *pDT = nil;
+    float       xStretch;
+    float       yStretch;
+
+    if ([m_DockTileView thumbBitmap] != nil)
+    {
+        /*
+         * Only update after at least 200 ms, cause glReadPixels is
+         * heavy performance wise.
+         */
+        uint64_t                                msTS = RTTimeSystemMilliTS();
+        VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR    CIter;
+        const VBOXVR_SCR_COMPOSITOR_ENTRY      *pEntry;
+
+        if (msTS - m_msDockUpdateTS > 200)
+        {
+            m_msDockUpdateTS = msTS;
+# if 0
+            /** @todo check this for optimization */
+            glBindTexture(GL_TEXTURE_RECTANGLE_ARB, myTextureName);
+            glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_STORAGE_HINT_APPLE,
+                            GL_STORAGE_SHARED_APPLE);
+            glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE);
+            glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA,
+                         sizex, sizey, 0, GL_BGRA,
+                         GL_UNSIGNED_INT_8_8_8_8_REV, myImagePtr);
+            glCopyTexSubImage2D(GL_TEXTURE_RECTANGLE_ARB,
+                                0, 0, 0, 0, 0, image_width, image_height);
+            glFlush();
+            /* Do other work processing here, using a double or triple buffer */
+            glGetTexImage(GL_TEXTURE_RECTANGLE_ARB, 0, GL_BGRA,
+                          GL_UNSIGNED_INT_8_8_8_8_REV, pixels);
+# endif
+            glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0);
+            glDrawBuffer(GL_BACK);
+
+            /* Clear background to transparent */
+            glClear(GL_COLOR_BUFFER_BIT);
+
+            rr = [m_DockTileView frame];
+
+            CrVrScrCompositorGetStretching(pCompositor, &xStretch, &yStretch);
+
+            CrVrScrCompositorConstIterInit(pCompositor, &CIter);
+            while ((pEntry = CrVrScrCompositorConstIterNext(&CIter)) != NULL)
+            {
+                uint32_t    cRegions;
+                PCRTRECT    paSrcRegions;
+                PCRTRECT    paDstRegions;
+                int rc = CrVrScrCompositorEntryRegionsGet(pCompositor, pEntry, &cRegions, &paSrcRegions, &paDstRegions, NULL);
+                uint32_t    fFlags = CrVrScrCompositorEntryFlagsCombinedGet(pCompositor, pEntry);
+                if (RT_SUCCESS(rc))
+                {
+                    rc = CrBltEnter(m_pBlitter);
+                    if (RT_SUCCESS(rc))
+                    {
+                        uint32_t i;
+                        for (i = 0; i < cRegions; ++i)
+                        {
+                            const CR_TEXDATA *pTexData;
+                            PCRTRECT pSrcRect = &paSrcRegions[i];
+                            PCRTRECT pDstRect = &paDstRegions[i];
+                            RTRECT   DstRect, RestrictDstRect;
+                            RTRECT   SrcRect, RestrictSrcRect;
+
+                            vboxNSRectToRect(&m_RootRect, &RestrictDstRect);
+                            VBoxRectIntersected(&RestrictDstRect, pDstRect, &DstRect);
+
+                            VBoxRectTranslate(&DstRect, -RestrictDstRect.xLeft, -RestrictDstRect.yTop);
+
+                            VBoxRectScale(&DstRect, m_FBOThumbScaleX, m_FBOThumbScaleY);
+
+                            if (VBoxRectIsZero(&DstRect))
+                                continue;
+
+                            vboxNSRectToRectUnstretched(&m_RootRect, &RestrictSrcRect, xStretch, yStretch);
+                            VBoxRectTranslate(&RestrictSrcRect,
+                                              -CrVrScrCompositorEntryRectGet(pEntry)->xLeft,
+                                              -CrVrScrCompositorEntryRectGet(pEntry)->yTop);
+                            VBoxRectIntersected(&RestrictSrcRect, pSrcRect, &SrcRect);
+
+                            if (VBoxRectIsZero(&SrcRect))
+                                continue;
+
+                            pSrcRect = &SrcRect;
+                            pDstRect = &DstRect;
+
+                            pTexData = CrVrScrCompositorEntryTexGet(pEntry);
+
+                            CrBltBlitTexMural(m_pBlitter, true, CrTdTexGet(pTexData), pSrcRect, pDstRect, 1, fFlags);
+                        }
+                        CrBltLeave(m_pBlitter);
+                    }
+                    else
+                    {
+                        DEBUG_WARN(("CrBltEnter failed rc %d", rc));
+# ifndef DEBUG_VERBOSE
+                        AssertMsgFailed(("CrBltEnter failed rc %Rrc", rc));
+# endif
+                    }
+                }
+                else
+                {
+                    DEBUG_MSG_1(("BlitStretched: CrVrScrCompositorEntryRegionsGet failed rc %d\n", rc));
+                    AssertMsgFailed(("BlitStretched: CrVrScrCompositorEntryRegionsGet failed rc %Rrc\n", rc));
+                }
+            }
+
+            glFinish();
+
+            glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0);
+            glReadBuffer(GL_BACK);
+
+            /* Here the magic of reading the FBO content in our own buffer
+             * happens. We have to lock this access, in the case the dock
+             * is updated currently. */
+            [m_DockTileView lock];
+            glReadPixels(0, m_RootRect.size.height - rr.size.height, rr.size.width, rr.size.height,
+                         GL_BGRA,
+                         GL_UNSIGNED_INT_8_8_8_8,
+                         [[m_DockTileView thumbBitmap] bitmapData]);
+            [m_DockTileView unlock];
+
+# ifdef VBOX_WITH_CRDUMPER_THUMBNAIL
+            ++g_cVBoxTgaCtr;
+            crDumpNamedTGAF((GLint)rr.size.width, (GLint)rr.size.height,
+                [[m_DockTileView thumbBitmap] bitmapData], "/Users/leo/vboxdumps/dump%d.tga", g_cVBoxTgaCtr);
+# endif
+
+            pDT = [[NSApplication sharedApplication] dockTile];
+
+            /* Send a display message to the dock tile in the main thread */
+            [[[NSApplication sharedApplication] dockTile] performSelectorOnMainThread:@selector(display) withObject:nil
+                                                                        waitUntilDone:NO];
+        }
+    }
+}
+#endif /* !IN_VMSVGA3D */
+
+- (void)clearVisibleRegions
+{
+    if (m_paClipRects)
+    {
+        RTMemFree(m_paClipRects);
+        m_paClipRects = NULL;
+    }
+    m_cClipRects = 0;
+}
+
+- (GLboolean)vboxNeedsEmptyPresent
+{
+    if (m_fDataVisible)
+    {
+        m_fCleanupNeeded = true;
+        return GL_TRUE;
+    }
+
+    return GL_FALSE;
+}
+
+- (void)setVisibleRegions:(GLint)cRects paRects:(const GLint *)paRects
+{
+    COCOA_LOG_FLOW(("%s: self=%p cRects=%d paRects=%p\n", __PRETTY_FUNCTION__, (void *)self, cRects, (void *)paRects));
+    GLint cOldRects = m_cClipRects;
+
+    [self clearVisibleRegions];
+
+    if (cRects > 0)
+    {
+#ifdef DEBUG_poetzsch
+        int i = 0;
+        for (i = 0; i < cRects; ++i)
+            DEBUG_MSG_1(("OVIW(%p): setVisibleRegions: %d - %d %d %d %d\n", (void *)self, i, paRects[i * 4], paRects[i * 4 + 1], paRects[i * 4 + 2], paRects[i * 4 + 3]));
+#endif
+
+        m_paClipRects = (GLint *)RTMemDup(paRects, sizeof(GLint) * 4 * cRects);
+        m_cClipRects  = cRects;
+    }
+
+    COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
+}
+
+#ifndef IN_VMSVGA3D
+
+- (NSView *)dockTileScreen
+{
+    COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
+    NSView *pContentView = [[[NSApplication sharedApplication] dockTile] contentView];
+    NSView *pScreenContent = nil;
+
+    /*
+     * First try the new variant which checks if this window is within the
+     * screen which is previewed in the dock.
+     */
+    if ([pContentView respondsToSelector:@selector(screenContentWithParentView:)])
+        pScreenContent = [pContentView performSelector:@selector(screenContentWithParentView:) withObject:(id)m_pParentView];
+    /*
+     * If it fails, fall back to the old variant (VBox...).
+     */
+    else if ([pContentView respondsToSelector:@selector(screenContent)])
+        pScreenContent = [pContentView performSelector:@selector(screenContent)];
+
+    COCOA_LOG_FLOW(("%s: returns %p (pContentView=%p)\n", __PRETTY_FUNCTION__, (void *)pScreenContent, (void *)pContentView));
+    return pScreenContent;
+}
+
+- (void)reshapeDockTile
+{
+    COCOA_LOG_FLOW(("%s:\n", __PRETTY_FUNCTION__));
+    NSRect newFrame = NSZeroRect;
+    NSView *pView = [self dockTileScreen];
+    if (pView != nil)
+    {
+        NSRect dockFrame = [pView frame];
+        /** @todo This is not correct, we should use framebuffer size here, while
+         *   parent view frame size may differ in case of scrolling. */
+        NSRect parentFrame = [m_pParentView frame];
+
+        m_FBOThumbScaleX = (float)dockFrame.size.width / parentFrame.size.width;
+        m_FBOThumbScaleY = (float)dockFrame.size.height / parentFrame.size.height;
+        newFrame = NSMakeRect((int)(m_Pos.x * m_FBOThumbScaleX),
+                              (int)(dockFrame.size.height - (m_Pos.y + m_Size.height - m_yInvRootOffset) * m_FBOThumbScaleY),
+                              (int)(m_Size.width * m_FBOThumbScaleX),
+                              (int)(m_Size.height * m_FBOThumbScaleY));
+        /*
+        NSRect newFrame = NSMakeRect ((int)roundf(m_Pos.x * m_FBOThumbScaleX), (int)roundf(dockFrame.size.height - (m_Pos.y + m_Size.height) * m_FBOThumbScaleY), (int)roundf(m_Size.width * m_FBOThumbScaleX), (int)roundf(m_Size.height * m_FBOThumbScaleY));
+        NSRect newFrame = NSMakeRect ((m_Pos.x * m_FBOThumbScaleX), (dockFrame.size.height - (m_Pos.y + m_Size.height) * m_FBOThumbScaleY), (m_Size.width * m_FBOThumbScaleX), (m_Size.height * m_FBOThumbScaleY));
+        printf ("%f %f %f %f - %f %f\n", newFrame.origin.x, newFrame.origin.y, newFrame.size.width, newFrame.size.height, m_Size.height, m_FBOThumbScaleY);
+        */
+        [m_DockTileView setFrame: newFrame];
+    }
+    COCOA_LOG_FLOW(("%s: returns - newFrame={%d,%d %d,%d} pView=%d\n", __PRETTY_FUNCTION__,  (int)newFrame.origin.x,
+                    (int)newFrame.origin.y, (int)newFrame.size.width, (int)newFrame.size.height, (void *)pView));
+}
+
+#endif /* !IN_VMSVGA3D */
+
+@end /* @implementation OverlayView */
+
+
+/********************************************************************************
+*
+* OpenGL context management
+*
+********************************************************************************/
+void cocoaGLCtxCreate(NativeNSOpenGLContextRef *ppCtx, GLbitfield fVisParams, NativeNSOpenGLContextRef pSharedCtx)
+{
+    COCOA_LOG_FLOW(("cocoaGLCtxCreate: ppCtx=%p fVisParams=%#x pSharedCtx=%p\n", (void *)ppCtx, fVisParams, (void *)pSharedCtx));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    NSOpenGLPixelFormat *pFmt = vboxCreatePixelFormat(fVisParams);
+    if (pFmt)
+    {
+        *ppCtx = [[OverlayOpenGLContext alloc] initWithFormat:pFmt shareContext:pSharedCtx];
+        Assert(*ppCtx);
+
+        /* Enable multi threaded OpenGL engine */
+        /*
+        CGLContextObj cglCtx = [*ppCtx CGLContextObj];
+        CGLError err = CGLEnable(cglCtx, kCGLCEMPEngine);
+        if (err != kCGLNoError)
+            printf ("Couldn't enable MT OpenGL engine!\n");
+        */
+    }
+    else
+    {
+        AssertFailed();
+        *ppCtx = NULL;
+    }
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaGLCtxCreate: returns *ppCtx=%p\n", (void *)*ppCtx));
+}
+
+void cocoaGLCtxDestroy(NativeNSOpenGLContextRef pCtx)
+{
+    COCOA_LOG_FLOW(("cocoaGLCtxDestroy: pCtx=%p\n", (void *)pCtx));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    [pCtx release];
+    /*[pCtx performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO];*/
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaGLCtxDestroy: returns\n"));
+}
+
+/********************************************************************************
+*
+* View management
+*
+********************************************************************************/
+static OverlayView *vboxViewCreate(WindowInfo *pWinInfo, NativeNSViewRef pParentView, GLbitfield fVisParams)
+{
+    COCOA_LOG_FLOW(("vboxViewCreate: pWinInfo=%p pParentView=%p fVisParams=%#x\n", pWinInfo, (void *)pParentView, fVisParams));
+
+    /* Create our worker view. */
+    OverlayView *pView = [[OverlayView alloc] initWithFrame:NSZeroRect
+                                                     thread:RTThreadSelf()
+                                                 parentView:pParentView
+                                                    winInfo:pWinInfo
+                                                 fVisParams:fVisParams];
+
+    if (pView)
+    {
+        /* We need a real window as container for the view */
+        [[OverlayWindow alloc] initWithParentView:pParentView overlayView:pView];
+        /* Return the freshly created overlay view */
+        COCOA_LOG_FLOW(("vboxViewCreate: returns %p\n", (void *)pView));
+        return pView;
+    }
+
+    COCOA_LOG_FLOW(("vboxViewCreate: returns NULL\n"));
+    return NULL;
+}
+
+#ifndef IN_VMSVGA3D
+
+typedef struct CR_RCD_CREATEVIEW
+{
+    WindowInfo *pWinInfo;
+    NSView *pParentView;
+    GLbitfield fVisParams;
+    /* out */
+    OverlayView *pView;
+} CR_RCD_CREATEVIEW;
+
+static DECLCALLBACK(void) vboxRcdCreateView(void *pvCb)
+{
+    CR_RCD_CREATEVIEW *pCreateView = (CR_RCD_CREATEVIEW *)pvCb;
+    pCreateView->pView = vboxViewCreate(pCreateView->pWinInfo, pCreateView->pParentView, pCreateView->fVisParams);
+    COCOA_LOG_FLOW(("vboxRcdCreateView: returns pView=%p\n", (void *)pCreateView->pView));
+}
+
+#endif /* !IN_VMSVGA3D */
+
+void cocoaViewCreate(NativeNSViewRef *ppView, WindowInfo *pWinInfo, NativeNSViewRef pParentView, GLbitfield fVisParams)
+{
+    COCOA_LOG_FLOW(("cocoaViewCreate: ppView=%p pWinInfo=%p pParentView=%p fVisParams=%#x\n",
+                    (void *)ppView, (void *)pWinInfo, (void *)pParentView, fVisParams));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    /* make sure all tasks are run, to preserve the order */
+    VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
+    [pRunner runTasksSyncIfPossible];
+
+#ifndef IN_VMSVGA3D
+    renderspuWinRetain(pWinInfo);
+
+    if (renderspuCalloutAvailable())
+    {
+        CR_RCD_CREATEVIEW CreateView;
+        CreateView.pWinInfo = pWinInfo;
+        CreateView.pParentView = pParentView;
+        CreateView.fVisParams = fVisParams;
+        CreateView.pView = NULL;
+        renderspuCalloutClient(vboxRcdCreateView, &CreateView);
+        *ppView = CreateView.pView;
+    }
+    else
+#endif
+    {
+        DEBUG_MSG_NOT_VMSVGA3D(("no callout available on createWindow\n"));
+#if 0
+        dispatch_sync(dispatch_get_main_queue(), ^{
+#endif
+            *ppView = vboxViewCreate(pWinInfo, pParentView, fVisParams);
+#if 0
+        });
+#endif
+    }
+
+#ifndef IN_VMSVGA3D
+    if (!*ppView)
+        renderspuWinRelease(pWinInfo);
+#endif
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewCreate: returns *ppView=%p\n", (void *)*ppView));
+}
+
+#ifndef IN_VMSVGA3D
+void cocoaViewReparent(NativeNSViewRef pView, NativeNSViewRef pParentView)
+{
+    COCOA_LOG_FLOW(("cocoaViewReparent: pView=%p pParentView=%p\n", (void *)pView, (void *)pParentView));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    OverlayView *pOView = (OverlayView *)pView;
+    if (pOView)
+        [pOView vboxReparent:pParentView];
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewReparent: returns\n"));
+}
+#endif /* !IN_VMSVGA3D */
+
+void cocoaViewDestroy(NativeNSViewRef pView)
+{
+    COCOA_LOG_FLOW(("cocoaViewDestroy: pView=%p\n", (void *)pView));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
+    [pRunner addObj:pView selector:@selector(vboxDestroy) arg:nil];
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewDestroy: returns\n"));
+}
+
+#ifndef IN_VMSVGA3D
+void cocoaViewShow(NativeNSViewRef pView, GLboolean fShowIt)
+{
+    COCOA_LOG_FLOW(("cocoaViewShow: pView=%p fShowIt=%d\n", (void *)pView, fShowIt));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    [(OverlayView *)pView vboxSetVisible:fShowIt];
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewShow: returns\n"));
+}
+#endif /* IN_VMSVGA3D */
+
+void cocoaViewDisplay(NativeNSViewRef pView)
+{
+    COCOA_LOG_FLOW(("cocoaViewDisplay: pView=%p\n", (void *)pView));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+#ifndef IN_VMSVGA3D
+    DEBUG_WARN(("cocoaViewDisplay should never happen!\n"));
+    DEBUG_MSG_1(("cocoaViewDisplay %p\n", (void *)pView));
+#endif
+    [(OverlayView *)pView swapFBO];
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewDisplay: returns\n"));
+}
+
+void cocoaViewSetPosition(NativeNSViewRef pView, NativeNSViewRef pParentView, int x, int y)
+{
+    COCOA_LOG_FLOW(("cocoaViewSetPosition: pView=%p pParentView=%p x=%d y=%d\n", (void *)pView, (void *)pParentView, x, y));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    [(OverlayView *)pView vboxSetPos:NSMakePoint(x, y)];
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewSetPosition: returns\n"));
+}
+
+void cocoaViewSetSize(NativeNSViewRef pView, int cx, int cy)
+{
+    COCOA_LOG_FLOW(("cocoaViewSetSize: pView=%p cx=%d cy=%d\n", (void *)pView, cx, cy));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+    OverlayView *pOverlayView = (OverlayView *)pView;
+
+    [pOverlayView vboxSetSize:NSMakeSize(cx, cy)];
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewSetSize: returns\n"));
+}
+
+#ifndef IN_VMSVGA3D
+
+typedef struct CR_RCD_GETGEOMETRY
+{
+    OverlayView    *pView;
+    NSRect          rect;
+} CR_RCD_GETGEOMETRY;
+
+static DECLCALLBACK(void) vboxRcdGetGeomerty(void *pvUser)
+{
+    CR_RCD_GETGEOMETRY *pGetGeometry = (CR_RCD_GETGEOMETRY *)pvUser;
+    pGetGeometry->rect = [[pGetGeometry->pView window] frame];
+    COCOA_LOG_FLOW(("vboxRcdGetGeomerty: (x,y)=(%d,%d) (cx,cy)=(%d,%d)\n", pGetGeometry->rect.origin.x, pGetGeometry->rect.origin.y,
+                    pGetGeometry->rect.size.width, pGetGeometry->rect.size.height));
+}
+
+void cocoaViewGetGeometry(NativeNSViewRef pView, int *px, int *py, int *pcx, int *pcy)
+{
+    COCOA_LOG_FLOW(("cocoaViewGetGeometry: pView=%p px=%p py=%p pcx=%p pcy=%p\n",
+                    (void *)pView, (void *)px, (void *)py, (void *)pcx, (void *)pcy));
+    NSAutoreleasePool *pPool;
+    pPool = [[NSAutoreleasePool alloc] init];
+
+    /* make sure all tasks are run, to preserve the order */
+    VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
+    [pRunner runTasksSyncIfPossible];
+
+    NSRect frame;
+#ifndef IN_VMSVGA3D
+    if (renderspuCalloutAvailable())
+    {
+        CR_RCD_GETGEOMETRY GetGeometry;
+        GetGeometry.pView = (OverlayView *)pView;
+        renderspuCalloutClient(vboxRcdGetGeomerty, &GetGeometry);
+        frame = GetGeometry.rect;
+    }
+    else
+#endif
+    {
+        DEBUG_MSG_NOT_VMSVGA3D(("no callout available on getGeometry\n"));
+        frame = [[pView window] frame];
+    }
+
+    *px  = frame.origin.x;
+    *py  = frame.origin.y;
+    *pcx = frame.size.width;
+    *pcy = frame.size.height;
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewGetGeometry: returns *px=%d, *py=%d, *pcx=%d, *pcy=%d\n", *px, *py, *pcx, *pcy));
+}
+
+void cocoaViewPresentComposition(NativeNSViewRef pView, PCVBOXVR_SCR_COMPOSITOR_ENTRY pChangedEntry)
+{
+    COCOA_LOG_FLOW(("cocoaViewPresentComposition: pView=%p pChangedEntry=%p\n", (void *)pView, (void *)pChangedEntry));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+    NSOpenGLContext *pCtx;
+
+# ifdef IN_VMSVGA3D
+    Assert([(OverlayView *)pView glCtx]);
+
+# else
+    /* The view may not necesserily have a GL context set. */
+    pCtx = [(OverlayView *)pView glCtx];
+    if (!pCtx)
+    {
+        ContextInfo *pCtxInfo = renderspuDefaultSharedContextAcquire();
+        if (!pCtxInfo)
+        {
+            DEBUG_WARN(("renderspuDefaultSharedContextAcquire returned NULL"));
+
+            [pPool release];
+            DEBUG_FUNC_LEAVE();
+            return;
+        }
+
+        pCtx = pCtxInfo->context;
+
+        [(OverlayView *)pView setGLCtx:pCtx];
+    }
+# endif
+
+    [(OverlayView *)pView presentComposition:pChangedEntry];
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewPresentComposition: returns\n"));
+}
+
+#endif /* !IN_VMSVGA3D */
+
+void cocoaViewMakeCurrentContext(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx)
+{
+    COCOA_LOG_FLOW(("cocoaViewMakeCurrentContext: pView=%p pCtx=%p\n", (void *)pView, (void *)pCtx));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    if (pView)
+    {
+        [(OverlayView *)pView setGLCtx:pCtx];
+        [(OverlayView *)pView makeCurrentFBO];
+    }
+    else
+    {
+#ifdef IN_VMSVGA3D
+        /* Always flush before flush. glXMakeCurrent and wglMakeCurrent does this
+           implicitly, seemingly NSOpenGLContext::makeCurrentContext doesn't. */
+        if ([NSOpenGLContext currentContext] != nil)
+        {
+            DEBUG_CLEAR_GL_ERRORS();
+            glFlush();
+            DEBUG_CHECK_GL_ERROR("glFlush");
+        }
+#endif
+        [NSOpenGLContext clearCurrentContext];
+    }
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewMakeCurrentContext: returns\n"));
+}
+
+#ifndef IN_VMSVGA3D
+
+GLboolean cocoaViewNeedsEmptyPresent(NativeNSViewRef pView)
+{
+    COCOA_LOG_FLOW(("cocoaViewNeedsEmptyPresent: pView=%p\n", (void *)pView));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    GLboolean fNeedsPresent = [(OverlayView *)pView vboxNeedsEmptyPresent];
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewNeedsEmptyPresent: returns %d\n", fNeedsPresent));
+    return fNeedsPresent;
+}
+
+void cocoaViewSetVisibleRegion(NativeNSViewRef pView, GLint cRects, const GLint *paRects)
+{
+    COCOA_LOG_FLOW(("cocoaViewSetVisibleRegion: pView=%p cRects=%d paRects=%p)\n", (void *)pView, cRects, (void const *)paRects));
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    [(OverlayView *)pView setVisibleRegions:cRects paRects:paRects];
+
+    [pPool release];
+    COCOA_LOG_FLOW(("cocoaViewSetVisibleRegion: returns\n"));
+}
+
+#endif /* IN_VMSVGA3D */
+
+#ifdef IN_VMSVGA3D
+/*
+ * VMSVGA3D interface.
+ */
+
+VMSVGA3DCOCOA_DECL(bool) vmsvga3dCocoaCreateViewAndContext(NativeNSViewRef *ppView, NativeNSOpenGLContextRef *ppCtx,
+                                                           NativeNSViewRef pParentView, uint32_t cx, uint32_t cy,
+                                                           NativeNSOpenGLContextRef pSharedCtx, bool fOtherProfile)
+{
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+    GLbitfield fVisParams = CR_ALPHA_BIT | CR_DEPTH_BIT | CR_DOUBLE_BIT | (fOtherProfile ? VMSVGA3D_NON_DEFAULT_PROFILE_BIT : 0);
+    bool fRc = false;
+
+    cocoaGLCtxCreate(ppCtx, fVisParams, pSharedCtx);
+    if (*ppCtx)
+    {
+        cocoaViewCreate(ppView, NULL, pParentView, fVisParams);
+        if (*ppView)
+        {
+            cocoaViewSetSize(*ppView, cx, cy);
+            [(OverlayView *)*ppView setGLCtx: *ppCtx];
+            fRc = true;
+        }
+        else
+            [*ppCtx release];
+    }
+
+    [pPool release];
+    return fRc;
+}
+
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaDestroyViewAndContext(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx)
+{
+    cocoaGLCtxDestroy(pCtx);
+    cocoaViewDestroy(pView);
+}
+
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewSetPosition(NativeNSViewRef pView, NativeNSViewRef pParentView, int x, int y)
+{
+    cocoaViewSetPosition(pView, pParentView, x, y);
+}
+
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewSetSize(NativeNSViewRef pView, int w, int h)
+{
+    cocoaViewSetSize(pView, w, h);
+}
+
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewMakeCurrentContext(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx)
+{
+    Assert(!pView || [(OverlayView *)pView glCtx] == pCtx || [(OverlayView *)pView glCtx] == nil);
+    cocoaViewMakeCurrentContext(pView, pCtx);
+}
+
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaSwapBuffers(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx)
+{
+# if 1
+    Assert([(OverlayView *)pView glCtx] == pCtx);
+    Assert([pCtx view] == pView);
+    cocoaViewDisplay(pView);
+# else
+    DEBUG_FUNC_ENTER();
+    NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+    Assert([(OverlayView *)pView glCtx] == pCtx);
+    Assert([pCtx view] == pView);
+
+    [pCtx flushBuffer];
+
+    [pPool release];
+    DEBUG_FUNC_LEAVE();
+# endif
+}
+
+#endif /* IN_VMSVGA3D */
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_config.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_config.c	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_config.c	(revision 86648)
@@ -0,0 +1,90 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "renderspu.h"
+
+#include "cr_string.h"
+#include "cr_mem.h"
+#include "cr_error.h"
+
+#include <iprt/env.h>
+
+
+void renderspuSetVBoxConfiguration( RenderSPU *render_spu )
+{
+    const char *display = NULL;
+    int a;
+
+    for (a=0; a<256; a++)
+    {
+        render_spu->lut8[0][a] = 
+        render_spu->lut8[1][a] = 
+        render_spu->lut8[2][a] = a;
+    }
+    render_spu->use_lut8 = 0;
+
+    crFree( render_spu->window_title );
+    render_spu->window_title = crStrdup("Chromium Render SPU");
+    render_spu->defaultX = 0;
+    render_spu->defaultY = 0;
+    render_spu->defaultWidth = 0;
+    render_spu->defaultHeight = 0;
+    render_spu->fullscreen = 0;
+    render_spu->resizable = 0;
+    render_spu->ontop = 1;
+    render_spu->borderless = 1;
+    render_spu->default_visual = CR_RGB_BIT | CR_DOUBLE_BIT | CR_DEPTH_BIT;
+#if defined(GLX)
+    render_spu->try_direct = 1;
+    render_spu->force_direct = 0;
+#endif
+    render_spu->render_to_app_window = 0;
+    render_spu->render_to_crut_window = 0;
+    render_spu->drawCursor = 0;
+    render_spu->gather_userbuf_size = 0;
+    render_spu->use_lut8 = 0;
+    render_spu->num_swap_clients = 1;
+    render_spu->nvSwapGroup = 0;
+    render_spu->ignore_papi = 0;
+    render_spu->ignore_window_moves = 0;
+    render_spu->pbufferWidth = 0;
+    render_spu->pbufferHeight = 0;
+    render_spu->use_glxchoosevisual = 1;
+    render_spu->draw_bbox = 0;
+
+    display = RTEnvGet("DISPLAY");
+    if (display)
+        crStrncpy(render_spu->display_string, display, sizeof(render_spu->display_string));
+    else
+        crStrcpy(render_spu->display_string, ""); /* empty string */
+
+    /* Some initialization that doesn't really have anything to do
+     * with configuration but which was done here before:
+     */
+    render_spu->use_L2 = 0;
+    render_spu->cursorX = 0;
+    render_spu->cursorY = 0;
+#if defined(GLX)
+    render_spu->sync = 0;
+#endif
+
+    /* Config of "render force present main thread" (currently implemented by glx and wgl). */
+    {
+        const char *forcePresent = RTEnvGet("CR_RENDER_FORCE_PRESENT_MAIN_THREAD");
+        if (forcePresent)
+            render_spu->force_present_main_thread = crStrToInt(forcePresent) ? 1 : 0;
+        else
+        {
+#if defined(GLX)
+            /* Customer needed this for avoiding system 3D driver bugs. */
+            render_spu->force_present_main_thread = 1;
+#else
+            render_spu->force_present_main_thread = 0;
+#endif
+        }
+    }
+}
+
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_glx.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_glx.c	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_glx.c	(revision 86648)
@@ -0,0 +1,1886 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+#include <GL/glx.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xmu/StdCmap.h>
+#include <X11/Xatom.h>
+#include <X11/extensions/shape.h>
+#include <sys/time.h>
+#include <stdio.h>
+
+#include "cr_error.h"
+#include "cr_string.h"
+#include "cr_mem.h"
+#include "cr_process.h"
+#include "renderspu.h"
+
+/*
+ * Stuff from MwmUtils.h
+ */
+typedef struct
+{
+    unsigned long       flags;
+    unsigned long       functions;
+    unsigned long       decorations;
+    long                inputMode;
+    unsigned long       status;
+} PropMotifWmHints;
+
+#define PROP_MOTIF_WM_HINTS_ELEMENTS    5
+#define MWM_HINTS_DECORATIONS   (1L << 1)
+
+
+#define WINDOW_NAME window->title
+
+static Bool WindowExistsFlag;
+
+static int
+WindowExistsErrorHandler( Display *dpy, XErrorEvent *xerr )
+{
+    if (xerr->error_code == BadWindow)
+    {
+        WindowExistsFlag = GL_FALSE;
+    }
+    return 0;
+}
+
+static GLboolean
+WindowExists( Display *dpy, Window w )
+{
+    XWindowAttributes xwa;
+    int (*oldXErrorHandler)(Display *, XErrorEvent *);
+
+    WindowExistsFlag = GL_TRUE;
+    oldXErrorHandler = XSetErrorHandler(WindowExistsErrorHandler);
+    XGetWindowAttributes(dpy, w, &xwa); /* dummy request */
+    XSetErrorHandler(oldXErrorHandler);
+    return WindowExistsFlag;
+}
+
+static Colormap 
+GetLUTColormap( Display *dpy, XVisualInfo *vi )
+{
+    int a;  
+    XColor col;
+    Colormap cmap;
+
+#if defined(__cplusplus) || defined(c_plusplus)
+    int localclass = vi->c_class; /* C++ */
+#else
+    int localclass = vi->class; /* C */
+#endif
+    
+    if ( localclass != DirectColor )
+    {
+        crError( "No support for non-DirectColor visuals with LUTs" );
+    }
+
+    cmap = XCreateColormap( dpy, RootWindow(dpy, vi->screen), 
+            vi->visual, AllocAll );
+
+    for (a=0; a<256; a++)
+    {   
+        col.red = render_spu.lut8[0][a]<<8;
+        col.green = col.blue = 0;
+        col.pixel = a<<16;
+        col.flags = DoRed;
+        XStoreColor(dpy, cmap, &col);
+    }
+       
+    for (a=0; a<256; a++)
+    {   
+        col.green = render_spu.lut8[1][a]<<8;
+        col.red = col.blue = 0;
+        col.pixel = a<<8;
+        col.flags = DoGreen;
+        XStoreColor(dpy, cmap, &col);
+    }
+   
+    for (a=0; a<256; a++)
+    {   
+        col.blue = render_spu.lut8[2][a]<<8;
+        col.red = col.green= 0;
+        col.pixel = a;
+        col.flags = DoBlue;
+        XStoreColor(dpy, cmap, &col);
+    }
+   
+    return cmap;
+}
+
+static Colormap 
+GetShareableColormap( Display *dpy, XVisualInfo *vi )
+{
+    Status status;
+    XStandardColormap *standardCmaps;
+    Colormap cmap;
+    int i, numCmaps;
+
+#if defined(__cplusplus) || defined(c_plusplus)
+    int localclass = vi->c_class; /* C++ */
+#else
+    int localclass = vi->class; /* C */
+#endif
+    
+    if ( localclass != TrueColor )
+    {
+        crError( "No support for non-TrueColor visuals." );
+    }
+
+    status = XmuLookupStandardColormap( dpy, vi->screen, vi->visualid,
+            vi->depth, XA_RGB_DEFAULT_MAP,
+            False, True );
+
+    if ( status == 1 )
+    {
+        status = XGetRGBColormaps( dpy, RootWindow( dpy, vi->screen), 
+                &standardCmaps, &numCmaps, 
+                XA_RGB_DEFAULT_MAP );
+        if ( status == 1 )
+        {
+            for (i = 0 ; i < numCmaps ; i++)
+            {
+                if (standardCmaps[i].visualid == vi->visualid)
+                {
+                    cmap = standardCmaps[i].colormap;
+                    XFree( standardCmaps);
+                    return cmap;
+                }
+            }
+        }
+    }
+
+    cmap = XCreateColormap( dpy, RootWindow(dpy, vi->screen), 
+            vi->visual, AllocNone );
+    return cmap;
+}
+
+
+static int
+WaitForMapNotify( Display *display, XEvent *event, char *arg )
+{
+    (void)display;
+    return ( event->type == MapNotify && event->xmap.window == (Window)arg );
+}
+
+
+/**
+ * Return the X Visual ID of the given window
+ */
+static int
+GetWindowVisualID( Display *dpy, Window w )
+{
+    XWindowAttributes attr;
+    int k = XGetWindowAttributes(dpy, w, &attr);
+    if (!k)
+        return -1;
+    return attr.visual->visualid;
+}
+
+
+/**
+ * Wrapper for glXGetConfig().
+ */
+static int
+Attrib( const VisualInfo *visual, int attrib )
+{
+    int value = 0;
+    render_spu.ws.glXGetConfig( visual->dpy, visual->visual, attrib, &value );
+    return value;
+}
+
+
+
+/**
+ * Find a visual with the specified attributes.  If we fail, turn off an
+ * attribute (like multisample or stereo) and try again.
+ */
+static XVisualInfo *
+chooseVisualRetry( Display *dpy, int screen, GLbitfield visAttribs )
+{
+    while (1) {
+        XVisualInfo *vis = crChooseVisual(&render_spu.ws, dpy, screen,
+                                          (GLboolean) render_spu.use_lut8,
+                                          visAttribs);
+        if (vis)
+            return vis;
+
+        if (visAttribs & CR_MULTISAMPLE_BIT)
+            visAttribs &= ~CR_MULTISAMPLE_BIT;
+        else if (visAttribs & CR_OVERLAY_BIT)
+            visAttribs &= ~CR_OVERLAY_BIT;
+        else if (visAttribs & CR_STEREO_BIT)
+            visAttribs &= ~CR_STEREO_BIT;
+        else if (visAttribs & CR_ACCUM_BIT)
+            visAttribs &= ~CR_ACCUM_BIT;
+        else if (visAttribs & CR_ALPHA_BIT)
+            visAttribs &= ~CR_ALPHA_BIT;
+        else
+            return NULL;
+    }
+}
+
+
+/**
+ * Get an FBconfig for the specified attributes
+ */
+#ifdef GLX_VERSION_1_3
+static GLXFBConfig
+chooseFBConfig( Display *dpy, int screen, GLbitfield visAttribs )
+{
+    GLXFBConfig *fbconfig;
+    int attribs[1000], attrCount = 0, numConfigs;
+    int major, minor;
+
+    CRASSERT(visAttribs & CR_PBUFFER_BIT);
+
+    /* Make sure pbuffers are supported */
+    render_spu.ws.glXQueryVersion(dpy, &major, &minor);
+    if (major * 100 + minor < 103) {
+        crWarning("Render SPU: GLX %d.%d doesn't support pbuffers", major, minor);
+        return 0;
+    }
+
+    attribs[attrCount++] = GLX_DRAWABLE_TYPE;
+    attribs[attrCount++] = GLX_PBUFFER_BIT;
+
+    if (visAttribs & CR_RGB_BIT) {
+        attribs[attrCount++] = GLX_RENDER_TYPE;
+        attribs[attrCount++] = GLX_RGBA_BIT;
+        attribs[attrCount++] = GLX_RED_SIZE;
+        attribs[attrCount++] = 1;
+        attribs[attrCount++] = GLX_GREEN_SIZE;
+        attribs[attrCount++] = 1;
+        attribs[attrCount++] = GLX_BLUE_SIZE;
+        attribs[attrCount++] = 1;
+        if (visAttribs & CR_ALPHA_BIT) {
+            attribs[attrCount++] = GLX_ALPHA_SIZE;
+            attribs[attrCount++] = 1;
+        }
+    }
+
+    if (visAttribs & CR_DEPTH_BIT) {
+        attribs[attrCount++] = GLX_DEPTH_SIZE;
+        attribs[attrCount++] = 1;
+    }
+
+    if (visAttribs & CR_DOUBLE_BIT) {
+        attribs[attrCount++] = GLX_DOUBLEBUFFER;
+        attribs[attrCount++] = True;
+    }
+    else {
+        /* don't care */
+    }
+
+    if (visAttribs & CR_STENCIL_BIT) {
+        attribs[attrCount++] = GLX_STENCIL_SIZE;
+        attribs[attrCount++] = 1;
+    }
+
+    if (visAttribs & CR_ACCUM_BIT) {
+        attribs[attrCount++] = GLX_ACCUM_RED_SIZE;
+        attribs[attrCount++] = 1;
+        attribs[attrCount++] = GLX_ACCUM_GREEN_SIZE;
+        attribs[attrCount++] = 1;
+        attribs[attrCount++] = GLX_ACCUM_BLUE_SIZE;
+        attribs[attrCount++] = 1;
+        if (visAttribs & CR_ALPHA_BIT) {
+            attribs[attrCount++] = GLX_ACCUM_ALPHA_SIZE;
+            attribs[attrCount++] = 1;
+        }
+    }
+
+    if (visAttribs & CR_MULTISAMPLE_BIT) {
+        attribs[attrCount++] = GLX_SAMPLE_BUFFERS_SGIS;
+        attribs[attrCount++] = 1;
+        attribs[attrCount++] = GLX_SAMPLES_SGIS;
+        attribs[attrCount++] = 4;
+    }
+
+    if (visAttribs & CR_STEREO_BIT) {
+        attribs[attrCount++] = GLX_STEREO;
+        attribs[attrCount++] = 1;
+    }
+
+    /* terminate */
+    attribs[attrCount++] = 0;
+
+    fbconfig = render_spu.ws.glXChooseFBConfig(dpy, screen, attribs, &numConfigs);
+    if (!fbconfig || numConfigs == 0) {
+        /* no matches! */
+        return 0;
+    }
+    if (numConfigs == 1) {
+        /* one match */
+        return fbconfig[0];
+    }
+    else {
+        /* found several matches - try to find best one */
+        int i;
+
+        crDebug("Render SPU: glXChooseFBConfig found %d matches for visBits 0x%x",
+                        numConfigs, visAttribs);
+        /* Skip/omit configs that have unneeded Z buffer or unneeded double
+         * buffering.  Possible add other tests in the future.
+         */
+        for (i = 0; i < numConfigs; i++) {
+            int zBits, db;
+            render_spu.ws.glXGetFBConfigAttrib(dpy, fbconfig[i],
+                                               GLX_DEPTH_SIZE, &zBits);
+            if ((visAttribs & CR_DEPTH_BIT) == 0 && zBits > 0) {
+                /* omit fbconfig with unneeded Z */
+                continue;
+            }
+            render_spu.ws.glXGetFBConfigAttrib(dpy, fbconfig[i],
+                                               GLX_DOUBLEBUFFER, &db);
+            if ((visAttribs & CR_DOUBLE_BIT) == 0 && db) {
+                /* omit fbconfig with unneeded DB */
+                continue;
+            }
+
+            /* if we get here, use this config */
+            return fbconfig[i];
+        }
+
+        /* if we get here, we didn't find a better fbconfig */
+        return fbconfig[0];
+    }
+}
+#endif /* GLX_VERSION_1_3 */
+
+static const char * renderspuGetDisplayName()
+{
+    const char *dpyName;
+
+    if (render_spu.display_string[0])
+        dpyName = render_spu.display_string;
+    else
+    {
+        crWarning("Render SPU: no display..");
+        dpyName = NULL;
+    }
+    return dpyName;
+}
+
+static int renderspuWinCmdWinCreate(WindowInfo *pWindow)
+{
+    return VERR_NOT_IMPLEMENTED;
+}
+
+static int renderspuWinCmdWinDestroy(WindowInfo *pWindow)
+{
+    return VERR_NOT_IMPLEMENTED;
+}
+
+static int renderspuWinCmdInit()
+{
+    const char * dpyName;
+    int rc = VERR_GENERAL_FAILURE;
+    
+    if (!crHashtableAllocRegisterKey(render_spu.windowTable, CR_RENDER_WINCMD_ID))
+    {
+        crError("CR_RENDER_WINCMD_ID %d is occupied already", CR_RENDER_WINCMD_ID);
+        return VERR_INVALID_STATE;
+    }
+    
+    render_spu.pWinToInfoTable = crAllocHashtable();
+    if (render_spu.pWinToInfoTable)
+    {
+        dpyName = renderspuGetDisplayName();
+        if (dpyName)
+        {
+            GLboolean bRc = renderspuInitVisual(&render_spu.WinCmdVisual, dpyName, render_spu.default_visual);
+            if (bRc)
+            {
+                bRc = renderspuWinInitWithVisual(&render_spu.WinCmdWindow, &render_spu.WinCmdVisual, GL_FALSE, CR_RENDER_WINCMD_ID);
+                if (bRc)
+                {
+                    XSelectInput(render_spu.WinCmdVisual.dpy, render_spu.WinCmdWindow.window, StructureNotifyMask);
+                    render_spu.WinCmdAtom = XInternAtom(render_spu.WinCmdVisual.dpy, "VBoxWinCmd", False);
+                    CRASSERT(render_spu.WinCmdAtom != None);
+                    return VINF_SUCCESS;
+                }
+                else
+                {
+                    crError("renderspuWinInitWithVisual failed");
+                }
+                /* there is no visual destroy impl currently
+                 * @todo: implement */
+            }
+            else
+            {
+                crError("renderspuInitVisual failed");
+            }
+        }
+        else
+        {
+            crError("Render SPU: no display, aborting");
+        }
+        crFreeHashtable(render_spu.pWinToInfoTable, NULL);
+        render_spu.pWinToInfoTable = NULL;
+    }
+    else
+    {
+        crError("crAllocHashtable failed");
+    }
+    return rc;
+}
+
+static void renderspuWinCmdTerm()
+{
+    /* the window is not in the table, this will just ensure the key is freed */
+    crHashtableDelete(render_spu.windowTable, CR_RENDER_WINCMD_ID, NULL);
+    renderspuWinCleanup(&render_spu.WinCmdWindow);
+    crFreeHashtable(render_spu.pWinToInfoTable, NULL);
+    /* we do not have visual destroy functionality 
+     * @todo implement */
+}
+
+
+static bool renderspuWinCmdProcess(CR_RENDER_WINCMD* pWinCmd)
+{
+    bool fExit = false;
+    /* process commands */
+    switch (pWinCmd->enmCmd)
+    {
+        case CR_RENDER_WINCMD_TYPE_WIN_ON_CREATE:
+            crHashtableAdd(render_spu.pWinToInfoTable, pWinCmd->pWindow->window, pWinCmd->pWindow);
+            XSelectInput(render_spu.WinCmdVisual.dpy, pWinCmd->pWindow->window, ExposureMask);
+            pWinCmd->rc = VINF_SUCCESS;
+            break;
+        case CR_RENDER_WINCMD_TYPE_WIN_ON_DESTROY:
+            crHashtableDelete(render_spu.pWinToInfoTable, pWinCmd->pWindow->window, NULL);
+            pWinCmd->rc = VINF_SUCCESS;
+            break;
+        case CR_RENDER_WINCMD_TYPE_NOP:
+            pWinCmd->rc = VINF_SUCCESS;
+            break;
+        case CR_RENDER_WINCMD_TYPE_EXIT:
+            renderspuWinCmdTerm();
+            pWinCmd->rc = VINF_SUCCESS;
+            fExit = true;
+            pWinCmd->rc = VINF_SUCCESS;
+            break;
+        case CR_RENDER_WINCMD_TYPE_WIN_CREATE:
+            pWinCmd->rc = renderspuWinCmdWinCreate(pWinCmd->pWindow);
+            break;  
+        case CR_RENDER_WINCMD_TYPE_WIN_DESTROY:
+            pWinCmd->rc = renderspuWinCmdWinDestroy(pWinCmd->pWindow);
+            break;
+        default:
+            crError("unknown WinCmd command! %d", pWinCmd->enmCmd);
+            pWinCmd->rc = VERR_INVALID_PARAMETER;
+            break;
+    }
+
+    RTSemEventSignal(render_spu.hWinCmdCompleteEvent);
+    return fExit;
+}
+
+static DECLCALLBACK(int) renderspuWinCmdThreadProc(RTTHREAD ThreadSelf, void *pvUser)
+{
+    int rc;
+    bool fExit = false;
+    crDebug("RenderSPU: Window thread started (%x)", crThreadID());
+    
+    rc = renderspuWinCmdInit();
+
+    /* notify the main cmd thread that we have started */
+    RTSemEventSignal(render_spu.hWinCmdCompleteEvent);
+    
+    if (!RT_SUCCESS(rc))
+    {
+        CRASSERT(!render_spu.pWinToInfoTable);
+        return rc;
+    }
+
+    do
+    {
+    	XEvent event;
+    	XNextEvent(render_spu.WinCmdVisual.dpy, &event);
+        
+    	switch (event.type)
+    	{
+            case ClientMessage:
+            {
+                CRASSERT(event.xclient.window == render_spu.WinCmdWindow.window);
+                if (event.xclient.window == render_spu.WinCmdWindow.window)
+                {
+                    if (render_spu.WinCmdAtom == event.xclient.message_type)
+                    {
+                        CR_RENDER_WINCMD *pWinCmd;
+                        memcpy(&pWinCmd, event.xclient.data.b, sizeof (pWinCmd));
+                        fExit = renderspuWinCmdProcess(pWinCmd);
+                    }
+                }
+                
+                break;
+            }
+            case Expose:
+            {
+                if (!event.xexpose.count)
+                {    
+                    WindowInfo *pWindow = (WindowInfo*)crHashtableSearch(render_spu.pWinToInfoTable, event.xexpose.window);
+                    if (pWindow)
+                    {
+                        const struct VBOXVR_SCR_COMPOSITOR * pCompositor;
+
+                        pCompositor = renderspuVBoxCompositorAcquire(pWindow);
+                        if (pCompositor)
+                        {
+                            renderspuVBoxPresentCompositionGeneric(pWindow, pCompositor, NULL, 0, false);
+                            renderspuVBoxCompositorRelease(pWindow);
+                        }
+                    }
+                }
+                break;
+            }
+            default:
+                break;
+    	}
+    } while (!fExit);
+
+    return 0;
+}
+
+static int renderspuWinCmdSubmit(CR_RENDER_WINCMD_TYPE enmCmd, WindowInfo *pWindow)
+{
+    Status status;
+    XEvent event;
+    CR_RENDER_WINCMD WinCmd, *pWinCmd;
+    int rc;
+    
+    pWinCmd = &WinCmd;
+    pWinCmd->enmCmd = enmCmd;
+    pWinCmd->rc = VERR_GENERAL_FAILURE;
+    pWinCmd->pWindow = pWindow;
+    
+    memset(&event, 0, sizeof (event));
+    event.type = ClientMessage;
+    event.xclient.window = render_spu.WinCmdWindow.window;
+    event.xclient.message_type = render_spu.WinCmdAtom;
+    event.xclient.format = 8;
+    memcpy(event.xclient.data.b, &pWinCmd, sizeof (pWinCmd));
+    
+    status = XSendEvent(render_spu.pCommunicationDisplay, render_spu.WinCmdWindow.window, False, StructureNotifyMask, &event);
+    if (!status)
+    {
+        Assert(0);
+        crWarning("XSendEvent returned null");
+        return VERR_GENERAL_FAILURE;
+    }
+    
+    XFlush(render_spu.pCommunicationDisplay);
+    rc = RTSemEventWaitNoResume(render_spu.hWinCmdCompleteEvent, RT_INDEFINITE_WAIT);
+    if (!RT_SUCCESS(rc))
+    {
+        crWarning("RTSemEventWaitNoResume failed rc %d", rc);
+	return rc;
+    }
+    return pWinCmd->rc;
+}
+
+int renderspu_SystemInit()
+{
+    const char * dpyName;
+    int rc = VERR_GENERAL_FAILURE;
+    
+    if (!render_spu.use_glxchoosevisual) {
+        /* sometimes want to set this option with ATI drivers */
+        render_spu.ws.glXChooseVisual = NULL;
+    }
+
+    /* setup communication display connection */
+    dpyName = renderspuGetDisplayName();
+    if (!dpyName)
+    {
+        crWarning("no display name, aborting");
+        return VERR_GENERAL_FAILURE;
+    }
+    
+    render_spu.pCommunicationDisplay = XOpenDisplay(dpyName);
+    if (!render_spu.pCommunicationDisplay)
+    {
+        crWarning( "Couldn't open X display named '%s'", dpyName );
+        return VERR_GENERAL_FAILURE;
+    }
+
+    if ( !render_spu.ws.glXQueryExtension( render_spu.pCommunicationDisplay, NULL, NULL ) )
+    {
+        crWarning( "Render SPU: Display %s doesn't support GLX", dpyName );
+        return VERR_GENERAL_FAILURE;
+    }
+
+    rc = RTSemEventCreate(&render_spu.hWinCmdCompleteEvent);
+    if (RT_SUCCESS(rc))
+    {
+        rc = RTThreadCreate(&render_spu.hWinCmdThread, renderspuWinCmdThreadProc, NULL, 0, RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "VBoxCrWinCmd");
+	if (RT_SUCCESS(rc))
+	{
+	    rc = RTSemEventWait(render_spu.hWinCmdCompleteEvent, RT_INDEFINITE_WAIT);
+	    if (RT_SUCCESS(rc))
+	    {
+	        return VINF_SUCCESS;
+	    }
+	    else
+	    {
+            crWarning("RTSemEventWait failed rc %d", rc);
+        }
+
+        RTThreadWait(render_spu.hWinCmdThread, RT_INDEFINITE_WAIT, NULL);
+        }
+        else
+        {
+            crWarning("RTThreadCreate failed rc %d", rc);
+        }
+	    RTSemEventDestroy(render_spu.hWinCmdCompleteEvent);
+    }
+    else
+    {
+        crWarning("RTSemEventCreate failed rc %d", rc);
+    }
+    
+    return rc;
+}
+
+int renderspu_SystemTerm()
+{
+	int rc = renderspuWinCmdSubmit(CR_RENDER_WINCMD_TYPE_EXIT, NULL);
+	if (!RT_SUCCESS(rc))
+	{
+	    crWarning("renderspuWinCmdSubmit EXIT failed rc %d", rc);
+	    return rc;
+	}
+
+	RTThreadWait(render_spu.hWinCmdThread, RT_INDEFINITE_WAIT, NULL);
+	RTSemEventDestroy(render_spu.hWinCmdCompleteEvent);
+	return VINF_SUCCESS;
+}
+
+GLboolean
+renderspu_SystemInitVisual( VisualInfo *visual )
+{
+    const char *dpyName;
+    int screen;
+
+    CRASSERT(visual);
+    
+    dpyName = renderspuGetDisplayName();
+    if (!dpyName)
+    {
+        crWarning("Render SPU: no display, aborting");
+        return GL_FALSE;
+    }
+
+
+    crInfo("Render SPU: Opening display %s", dpyName);
+
+    if (dpyName &&
+            (crStrncmp(dpyName, "localhost:11", 12) == 0 ||
+             crStrncmp(dpyName, "localhost:12", 12) == 0 ||
+             crStrncmp(dpyName, "localhost:13", 12) == 0)) {
+        /* Issue both debug and warning messages to make sure the
+         * message gets noticed!
+         */
+        crDebug("Render SPU: display string looks like a proxy X server!");
+        crDebug("Render SPU: This is usually a problem!");
+        crWarning("Render SPU: display string looks like a proxy X server!");
+        crWarning("Render SPU: This is usually a problem!");
+    }
+
+    visual->dpy = XOpenDisplay(dpyName);  
+    if (!visual->dpy)
+    {
+        crWarning( "Couldn't open X display named '%s'", dpyName );
+        return GL_FALSE;
+    }
+
+    if ( !render_spu.ws.glXQueryExtension( visual->dpy, NULL, NULL ) )
+    {
+        crWarning( "Render SPU: Display %s doesn't support GLX", visual->displayName );
+        return GL_FALSE;
+    }
+
+    screen = DefaultScreen(visual->dpy);
+
+#ifdef GLX_VERSION_1_3
+    if (visual->visAttribs & CR_PBUFFER_BIT)
+    {
+        visual->fbconfig = chooseFBConfig(visual->dpy, screen, visual->visAttribs);
+        if (!visual->fbconfig) {
+            char s[1000];
+            renderspuMakeVisString( visual->visAttribs, s );
+            crWarning( "Render SPU: Display %s doesn't have the necessary fbconfig: %s",
+                                 dpyName, s );
+            XCloseDisplay(visual->dpy);
+            return GL_FALSE;
+        }
+    }
+    else
+#endif /* GLX_VERSION_1_3 */
+    {
+        visual->visual = chooseVisualRetry(visual->dpy, screen, visual->visAttribs);
+        if (!visual->visual) {
+            char s[1000];
+            renderspuMakeVisString( visual->visAttribs, s );
+            crWarning("Render SPU: Display %s doesn't have the necessary visual: %s",
+                                dpyName, s );
+            XCloseDisplay(visual->dpy);
+            return GL_FALSE;
+        }
+    }
+
+    if ( render_spu.sync )
+    {
+        crDebug( "Render SPU: Turning on XSynchronize" );
+        XSynchronize( visual->dpy, True );
+    }
+
+    if (visual->visual) {
+            crDebug( "Render SPU: Choose visual id=0x%x: RGBA=(%d,%d,%d,%d) Z=%d"
+                     " stencil=%d double=%d stereo=%d accum=(%d,%d,%d,%d)",
+                     (int) visual->visual->visualid,
+                     Attrib( visual, GLX_RED_SIZE ),
+                     Attrib( visual, GLX_GREEN_SIZE ),
+                     Attrib( visual, GLX_BLUE_SIZE ),
+                     Attrib( visual, GLX_ALPHA_SIZE ),
+                     Attrib( visual, GLX_DEPTH_SIZE ),
+                     Attrib( visual, GLX_STENCIL_SIZE ),
+                     Attrib( visual, GLX_DOUBLEBUFFER ),
+                     Attrib( visual, GLX_STEREO ),
+                     Attrib( visual, GLX_ACCUM_RED_SIZE ),
+                     Attrib( visual, GLX_ACCUM_GREEN_SIZE ),
+                     Attrib( visual, GLX_ACCUM_BLUE_SIZE ),
+                     Attrib( visual, GLX_ACCUM_ALPHA_SIZE )
+                     );
+    }
+    else if (visual->fbconfig) {
+        int id;
+        render_spu.ws.glXGetFBConfigAttrib(visual->dpy, visual->fbconfig,
+                                                                             GLX_FBCONFIG_ID, &id);
+        crDebug("Render SPU: Chose FBConfig 0x%x, visBits=0x%x",
+                        id, visual->visAttribs);
+    }
+
+    return GL_TRUE;
+}
+
+
+/*
+ * Add a GLX window to a swap group for inter-machine SwapBuffer
+ * synchronization.
+ * Only supported on NVIDIA Quadro 3000G hardware.
+ */
+static void
+JoinSwapGroup(Display *dpy, int screen, Window window,
+                            GLuint group, GLuint barrier)
+{
+    GLuint maxGroups, maxBarriers;
+    const char *ext;
+    Bool b;
+
+    /*
+     * XXX maybe query glXGetClientString() instead???
+     */
+    ext = render_spu.ws.glXQueryExtensionsString(dpy, screen);
+
+    if (!crStrstr(ext, "GLX_NV_swap_group") ||
+            !render_spu.ws.glXQueryMaxSwapGroupsNV ||
+            !render_spu.ws.glXJoinSwapGroupNV ||
+            !render_spu.ws.glXBindSwapBarrierNV) {
+        crWarning("Render SPU: nv_swap_group is set but GLX_NV_swap_group is not supported on this system!");
+        return;
+    }
+
+    b = render_spu.ws.glXQueryMaxSwapGroupsNV(dpy, screen,
+                                              &maxGroups, &maxBarriers);
+    if (!b)
+        crWarning("Render SPU: call to glXQueryMaxSwapGroupsNV() failed!");
+
+    if (group >= maxGroups) {
+        crWarning("Render SPU: nv_swap_group too large (%d > %d)",
+                        group, (int) maxGroups);
+        return;
+    }
+    crDebug("Render SPU: max swap groups = %d, max barriers = %d",
+                    maxGroups, maxBarriers);
+
+    /* add this window to the swap group */
+    b = render_spu.ws.glXJoinSwapGroupNV(dpy, window, group);
+    if (!b) {
+        crWarning("Render SPU: call to glXJoinSwapGroupNV() failed!");
+        return;
+    }
+    else {
+        crDebug("Render SPU: call to glXJoinSwapGroupNV() worked!");
+    }
+
+    /* ... and bind window to barrier of same ID */
+    b = render_spu.ws.glXBindSwapBarrierNV(dpy, group, barrier);
+    if (!b) {
+        crWarning("Render SPU: call to glXBindSwapBarrierNV(group=%d barrier=%d) failed!", group, barrier);
+        return;
+    }
+    else {
+         crDebug("Render SPU: call to glXBindSwapBarrierNV(group=%d barrier=%d) worked!", group, barrier);
+    }
+
+    crDebug("Render SPU: window has joined swap group %d", group);
+}
+
+
+
+static GLboolean
+createWindow( VisualInfo *visual, GLboolean showIt, WindowInfo *window )
+{
+    Display             *dpy;
+    Colormap             cmap;
+    XSetWindowAttributes swa;
+    XSizeHints           hints = {0};
+    XEvent               event;
+    XTextProperty        text_prop;
+    XClassHint          *class_hints = NULL;
+    Window               parent;
+    char                *name;
+    unsigned long        flags;
+    unsigned int vncWin;
+
+    CRASSERT(visual);
+    window->visual = visual;
+    window->nativeWindow = 0;
+
+    dpy = visual->dpy;
+
+    if ( render_spu.use_L2 )
+    {
+        crWarning( "Render SPU: Going fullscreen because we think we're using Lightning-2." );
+        render_spu.fullscreen = 1;
+    }
+
+    /*
+     * Query screen size if we're going full-screen
+     */
+    if ( render_spu.fullscreen )
+    {
+        XWindowAttributes xwa;
+        Window root_window;
+
+        /* disable the screensaver */
+        XSetScreenSaver( dpy, 0, 0, PreferBlanking, AllowExposures );
+        crDebug( "Render SPU: Just turned off the screensaver" );
+
+        /* Figure out how big the screen is, and make the window that size */
+        root_window = DefaultRootWindow( dpy );
+        XGetWindowAttributes( dpy, root_window, &xwa );
+
+        crDebug( "Render SPU: root window size: %d x %d", xwa.width, xwa.height );
+
+        window->x = 0;
+        window->y = 0;
+        window->BltInfo.width  = xwa.width;
+        window->BltInfo.height = xwa.height;
+    }
+
+    /* i've changed default window size to be 0,0 but X doesn't like it */
+    /*CRASSERT(window->BltInfo.width >= 1);
+    CRASSERT(window->BltInfo.height >= 1);*/
+    if (window->BltInfo.width < 1) window->BltInfo.width = 1;
+    if (window->BltInfo.height < 1) window->BltInfo.height = 1;
+
+    /*
+     * Get a colormap.
+     */
+    if (render_spu.use_lut8)
+        cmap = GetLUTColormap( dpy, visual->visual );
+    else
+        cmap = GetShareableColormap( dpy, visual->visual );
+    if ( !cmap ) {
+        crError( "Render SPU: Unable to get a colormap!" );
+        return GL_FALSE;
+    }
+
+    /* destroy existing window if there is one */
+    if (window->window) {
+        XDestroyWindow(dpy, window->window);
+    }
+
+    /*
+     * Create the window
+     *
+     * POSSIBLE OPTIMIZATION:
+     * If we're using the render_to_app_window or render_to_crut_window option
+     * (or DMX) we may never actually use this X window.  So we could perhaps
+     * delay its creation until glXMakeCurrent is called.  With NVIDIA's OpenGL
+     * driver, creating a lot of GLX windows can eat up a lot of VRAM and lead
+     * to slow, software-fallback rendering.  Apps that use render_to_app_window,
+     * etc should set the default window size very small to avoid this.
+     * See dmx.conf for example.
+     */
+    swa.colormap     = cmap;
+    swa.border_pixel = 0;
+    swa.event_mask   = ExposureMask | StructureNotifyMask;
+    swa.override_redirect = 1;
+
+    flags = CWBorderPixel | CWColormap | CWEventMask | CWOverrideRedirect;
+
+    parent = RootWindow(dpy, visual->visual->screen);
+    if (render_spu_parent_window_id>0)
+    {
+        crDebug("Render SPU: VBox parent window_id is: %x", render_spu_parent_window_id);
+        window->window = XCreateWindow(dpy, render_spu_parent_window_id,
+                                       window->x, window->y,
+                                       window->BltInfo.width, window->BltInfo.height,
+                                       0, visual->visual->depth, InputOutput,
+                                       visual->visual->visual, flags, &swa);
+    }
+    else
+    {
+        /* This should happen only at the call from crVBoxServerInit. At this point we don't
+         * know render_spu_parent_window_id yet, nor we need it for default window which is hidden.
+         */
+
+        crDebug("Render SPU: Creating global window, parent: %x", RootWindow(dpy, visual->visual->screen));
+        window->window = XCreateWindow(dpy, RootWindow(dpy, visual->visual->screen),
+                                       window->x, window->y,
+                                       window->BltInfo.width, window->BltInfo.height,
+                                       0, visual->visual->depth, InputOutput,
+                                       visual->visual->visual, flags, &swa);
+    }
+
+    if (!window->window) {
+        crWarning( "Render SPU: unable to create window" );
+        return GL_FALSE;
+    }
+
+    crDebug( "Render SPU: Created window 0x%x on display %s, Xvisual 0x%x",
+                     (int) window->window,
+                     DisplayString(visual->dpy),
+                     (int) visual->visual->visual->visualid  /* yikes */
+                     );
+
+    if (render_spu.fullscreen || render_spu.borderless)
+    {
+        /* Disable border/decorations with an MWM property (observed by most
+         * modern window managers.
+         */
+        PropMotifWmHints motif_hints;
+        Atom prop, proptype;
+
+        /* setup the property */
+        motif_hints.flags = MWM_HINTS_DECORATIONS;
+        motif_hints.decorations = 0; /* Turn off all decorations */
+
+        /* get the atom for the property */
+        prop = XInternAtom( dpy, "_MOTIF_WM_HINTS", True );
+        if (prop) {
+            /* not sure this is correct, seems to work, XA_WM_HINTS didn't work */
+            proptype = prop;
+            XChangeProperty( dpy, window->window,        /* display, window */
+                                             prop, proptype,              /* property, type */
+                                             32,                          /* format: 32-bit datums */
+                                             PropModeReplace,                /* mode */
+                                             (unsigned char *) &motif_hints, /* data */
+                                             PROP_MOTIF_WM_HINTS_ELEMENTS    /* nelements */
+                                             );
+        }
+    }
+
+    /* Make a clear cursor to get rid of the monitor cursor */
+    if ( render_spu.fullscreen )
+    {
+        Pixmap pixmap;
+        Cursor cursor;
+        XColor colour;
+        char clearByte = 0;
+        
+        /* AdB - Only bother to create a 1x1 cursor (byte) */
+        pixmap = XCreatePixmapFromBitmapData(dpy, window->window, &clearByte,
+                                             1, 1, 1, 0, 1);
+        if(!pixmap){
+            crWarning("Unable to create clear cursor pixmap");
+            return GL_FALSE;
+        }
+        
+        cursor = XCreatePixmapCursor(dpy, pixmap, pixmap, &colour, &colour, 0, 0);
+        if(!cursor){
+            crWarning("Unable to create clear cursor from zero byte pixmap");
+            return GL_FALSE;
+        }
+        XDefineCursor(dpy, window->window, cursor);
+        XFreePixmap(dpy, pixmap);
+    }
+    
+    hints.x = window->x;
+    hints.y = window->y;
+    hints.width = window->BltInfo.width;
+    hints.height = window->BltInfo.height;
+    hints.min_width = hints.width;
+    hints.min_height = hints.height;
+    hints.max_width = hints.width;
+    hints.max_height = hints.height;
+    if (render_spu.resizable)
+        hints.flags = USPosition | USSize;
+    else
+        hints.flags = USPosition | USSize | PMinSize | PMaxSize;
+    XSetStandardProperties( dpy, window->window,
+            WINDOW_NAME, WINDOW_NAME,
+            None, NULL, 0, &hints );
+
+    /* New item!  This is needed so that the sgimouse server can find
+     * the crDebug window. 
+     */
+    name = WINDOW_NAME;
+    XStringListToTextProperty( &name, 1, &text_prop );
+    XSetWMName( dpy, window->window, &text_prop );
+
+    /* Set window name, resource class */
+    class_hints = XAllocClassHint( );
+    class_hints->res_name = crStrdup( "foo" );
+    class_hints->res_class = crStrdup( "Chromium" );
+    XSetClassHint( dpy, window->window, class_hints );
+    crFree( class_hints->res_name );
+    crFree( class_hints->res_class );
+    XFree( class_hints );
+
+    if (showIt) {
+        XMapWindow( dpy, window->window );
+        XIfEvent( dpy, &event, WaitForMapNotify, 
+                            (char *) window->window );
+    }
+
+    if ((window->visual->visAttribs & CR_DOUBLE_BIT) && render_spu.nvSwapGroup) {
+        /* NOTE:
+         * If this SPU creates N windows we don't want to gang the N windows
+         * together!
+         * By adding the window ID to the nvSwapGroup ID we can be sure each
+         * app window is in a separate swap group while all the back-end windows
+         * which form a mural are in the same swap group.
+         */
+        GLuint group = 0; /*render_spu.nvSwapGroup + window->BltInfo.Base.id;*/
+        GLuint barrier = 0;
+        JoinSwapGroup(dpy, visual->visual->screen, window->window, group, barrier);
+    }
+
+    /*
+     * End GLX code
+     */
+    crDebug( "Render SPU: actual window x, y, width, height: %d, %d, %d, %d",
+                     window->x, window->y, window->BltInfo.width, window->BltInfo.height );
+
+    XSync(dpy, 0);
+    
+    if (window->BltInfo.Base.id != CR_RENDER_WINCMD_ID)
+    {
+        int rc = renderspuWinCmdSubmit(CR_RENDER_WINCMD_TYPE_WIN_ON_CREATE, window);
+        AssertRC(rc);
+    }
+
+    return GL_TRUE;
+}
+
+
+static GLboolean
+createPBuffer( VisualInfo *visual, WindowInfo *window )
+{
+    window->visual = visual;
+    window->x = 0;
+    window->y = 0;
+    window->nativeWindow = 0;
+
+    CRASSERT(window->BltInfo.width > 0);
+    CRASSERT(window->BltInfo.height > 0);
+
+#ifdef GLX_VERSION_1_3
+    {
+        int attribs[100], i = 0, w, h;
+        CRASSERT(visual->fbconfig);
+        w = window->BltInfo.width;
+        h = window->BltInfo.height;
+        attribs[i++] = GLX_PRESERVED_CONTENTS;
+        attribs[i++] = True;
+        attribs[i++] = GLX_PBUFFER_WIDTH;
+        attribs[i++] = w;
+        attribs[i++] = GLX_PBUFFER_HEIGHT;
+        attribs[i++] = h;
+        attribs[i++] = 0; /* terminator */
+        window->window = render_spu.ws.glXCreatePbuffer(visual->dpy,
+                                                        visual->fbconfig, attribs);
+        if (window->window) {
+            crDebug("Render SPU: Allocated %d x %d pbuffer", w, h);
+            return GL_TRUE;
+        }
+        else {
+            crWarning("Render SPU: Failed to allocate %d x %d pbuffer", w, h);
+            return GL_FALSE;
+        }
+    }
+#endif /* GLX_VERSION_1_3 */
+    return GL_FALSE;
+}
+
+
+GLboolean
+renderspu_SystemCreateWindow( VisualInfo *visual, GLboolean showIt, WindowInfo *window )
+{
+    if (visual->visAttribs & CR_PBUFFER_BIT) {
+        window->BltInfo.width = render_spu.defaultWidth;
+        window->BltInfo.height = render_spu.defaultHeight;
+        return createPBuffer(visual, window);
+    }
+    else {
+        return createWindow(visual, showIt, window);
+    }
+}
+
+GLboolean
+renderspu_SystemVBoxCreateWindow( VisualInfo *visual, GLboolean showIt, WindowInfo *window )
+{
+    return renderspu_SystemCreateWindow(visual, showIt, window);
+}
+
+void
+renderspu_SystemDestroyWindow( WindowInfo *window )
+{
+    CRASSERT(window);
+    CRASSERT(window->visual);
+
+    if (window->visual->visAttribs & CR_PBUFFER_BIT) {
+#ifdef GLX_VERSION_1_3
+        render_spu.ws.glXDestroyPbuffer(window->visual->dpy, window->window);
+#endif
+    }
+    else {
+        /* The value window->nativeWindow will only be non-NULL if the
+         * render_to_app_window option is set to true.  In this case, we
+         * don't want to do anything, since we're not responsible for this
+         * window.  I know...personal responsibility and all...
+         */
+        if (!window->nativeWindow) {
+            if (window->BltInfo.Base.id != CR_RENDER_WINCMD_ID)
+            {
+                int rc = renderspuWinCmdSubmit(CR_RENDER_WINCMD_TYPE_WIN_ON_DESTROY, window);
+                AssertRC(rc);
+            }
+            XDestroyWindow(window->visual->dpy, window->window);
+            XSync(window->visual->dpy, 0);
+        }
+    }
+    window->visual = NULL;
+    window->window = 0;
+}
+
+
+GLboolean
+renderspu_SystemCreateContext( VisualInfo *visual, ContextInfo *context, ContextInfo *sharedContext )
+{
+    Bool is_direct;
+    GLXContext sharedSystemContext = NULL;
+
+    CRASSERT(visual);
+    CRASSERT(context);
+
+    context->visual = visual;
+
+    if (sharedContext != NULL) {
+        sharedSystemContext = sharedContext->context;
+    }
+
+#ifdef  GLX_VERSION_1_3
+    if (visual->visAttribs & CR_PBUFFER_BIT) {
+        context->context = render_spu.ws.glXCreateNewContext( visual->dpy, 
+                                                              visual->fbconfig,
+                                                              GLX_RGBA_TYPE,
+                                                              sharedSystemContext,
+                                                              render_spu.try_direct);
+    }
+    else
+#endif
+    {
+         context->context = render_spu.ws.glXCreateContext( visual->dpy, 
+                                                            visual->visual,
+                                                            sharedSystemContext,
+                                                            render_spu.try_direct);
+    }
+    if (!context->context) {
+        crError( "Render SPU: Couldn't create rendering context" ); 
+        return GL_FALSE;
+    }
+
+    is_direct = render_spu.ws.glXIsDirect( visual->dpy, context->context );
+    if (visual->visual)
+        crDebug("Render SPU: Created %s context (%d) on display %s for visAttribs 0x%x",
+                        is_direct ? "DIRECT" : "INDIRECT",
+                        context->BltInfo.Base.id,
+                        DisplayString(visual->dpy),
+                        visual->visAttribs);
+
+    if ( render_spu.force_direct && !is_direct )
+    {
+        crError( "Render SPU: Direct rendering not possible." );
+        return GL_FALSE;
+    }
+
+    return GL_TRUE;
+}
+
+
+#define USE_GLX_COPYCONTEXT 0
+
+#if !USE_GLX_COPYCONTEXT
+
+/**
+ * Unfortunately, glXCopyContext() is broken sometimes (NVIDIA 76.76 driver).
+ * This bit of code gets and sets GL state we need to copy between contexts.
+ */
+struct saved_state
+{
+    /* XXX depending on the app, more state may be needed here */
+    GLboolean Lighting;
+    GLboolean LightEnabled[8];
+    GLfloat LightPos[8][4];
+    GLfloat LightAmbient[8][4];
+    GLfloat LightDiffuse[8][4];
+    GLfloat LightSpecular[8][4];
+    GLboolean DepthTest;
+};
+
+static struct saved_state SavedState;
+
+static void
+get_state(struct saved_state *s)
+{
+    int i;
+
+    s->Lighting = render_spu.self.IsEnabled(GL_LIGHTING);
+    for (i = 0; i < 8; i++) {
+        s->LightEnabled[i] = render_spu.self.IsEnabled(GL_LIGHT0 + i);
+        render_spu.self.GetLightfv(GL_LIGHT0 + i, GL_POSITION, s->LightPos[i]);
+        render_spu.self.GetLightfv(GL_LIGHT0 + i, GL_AMBIENT, s->LightAmbient[i]);
+        render_spu.self.GetLightfv(GL_LIGHT0 + i, GL_DIFFUSE, s->LightDiffuse[i]);
+        render_spu.self.GetLightfv(GL_LIGHT0 + i, GL_SPECULAR, s->LightSpecular[i]);
+    }
+
+    s->DepthTest = render_spu.self.IsEnabled(GL_DEPTH_TEST);
+}
+
+static void
+set_state(const struct saved_state *s)
+{
+    int i;
+
+    if (s->Lighting) {
+        render_spu.self.Enable(GL_LIGHTING);
+    }
+    else {
+        render_spu.self.Disable(GL_LIGHTING);
+    }
+
+    for (i = 0; i < 8; i++) {
+        if (s->LightEnabled[i]) {
+            render_spu.self.Enable(GL_LIGHT0 + i);
+        }
+        else {
+            render_spu.self.Disable(GL_LIGHT0 + i);
+        }
+        render_spu.self.Lightfv(GL_LIGHT0 + i, GL_POSITION, s->LightPos[i]);
+        render_spu.self.Lightfv(GL_LIGHT0 + i, GL_AMBIENT, s->LightAmbient[i]);
+        render_spu.self.Lightfv(GL_LIGHT0 + i, GL_DIFFUSE, s->LightDiffuse[i]);
+        render_spu.self.Lightfv(GL_LIGHT0 + i, GL_SPECULAR, s->LightSpecular[i]);
+    }
+
+    if (s->DepthTest)
+        render_spu.self.Enable(GL_DEPTH_TEST);
+    else
+        render_spu.self.Disable(GL_DEPTH_TEST);
+}
+
+#endif /* !USE_GLX_COPYCONTEXT */
+
+/**
+ * Recreate the GLX context for ContextInfo.  The new context will use the
+ * visual specified by newVisualID.
+ */
+static void
+renderspu_RecreateContext( ContextInfo *context, int newVisualID )
+{
+    XVisualInfo templateVis, *vis;
+    long templateFlags;
+    int screen = 0, count;
+    GLXContext oldContext = context->context;
+
+    templateFlags = VisualScreenMask | VisualIDMask;
+    templateVis.screen = screen;
+    templateVis.visualid = newVisualID;
+    vis = XGetVisualInfo(context->visual->dpy, templateFlags, &templateVis, &count);
+    CRASSERT(vis);
+    if (!vis)
+        return;
+
+    /* create new context */
+    crDebug("Render SPU: Creating new GLX context with visual 0x%x", newVisualID);
+    context->context = render_spu.ws.glXCreateContext(context->visual->dpy,
+                                                                                                        vis, NULL,
+                                                                                                        render_spu.try_direct);
+    CRASSERT(context->context);
+
+#if USE_GLX_COPYCONTEXT
+    /* copy old context state to new context */
+    render_spu.ws.glXCopyContext(context->visual->dpy,
+                                                             oldContext, context->context, ~0);
+    crDebug("Render SPU: Done copying context state");
+#endif
+
+    /* destroy old context */
+    render_spu.ws.glXDestroyContext(context->visual->dpy, oldContext);
+
+    context->visual->visual = vis;
+}
+
+
+void
+renderspu_SystemDestroyContext( ContextInfo *context )
+{
+    render_spu.ws.glXDestroyContext( context->visual->dpy, context->context );
+    context->visual = NULL;
+    context->context = 0;
+}
+
+
+void
+renderspu_SystemMakeCurrent( WindowInfo *window, GLint nativeWindow,
+                             ContextInfo *context )
+{
+    Bool b;
+
+    CRASSERT(render_spu.ws.glXMakeCurrent);
+
+    /*crDebug("%s nativeWindow=0x%x", __FUNCTION__, (int) nativeWindow);*/
+
+    nativeWindow = 0;
+
+    if (window && context) {
+        window->appWindow = nativeWindow;
+
+        if (window->visual != context->visual) {
+            crDebug("Render SPU: MakeCurrent visual mismatch (win(%d) bits:0x%x != ctx(%d) bits:0x%x); remaking window.",
+                            window->BltInfo.Base.id, window->visual->visAttribs,
+                            context->BltInfo.Base.id, context->visual->visAttribs);
+            /*
+             * XXX have to revisit this issue!!!
+             *
+             * But for now we destroy the current window
+             * and re-create it with the context's visual abilities
+             */
+#ifndef SOLARIS_9_X_BUG
+          /*
+            I'm having some really weird issues if I destroy this window 
+            when I'm using the version of sunX that comes with Solaris 9.
+            Subsiquent glX calls return GLXBadCurrentWindow error. 
+
+            This is an issue even when running Linux version and using 
+            the Solaris 9 sunX as a display.
+            -- jw
+
+                jw: we might have to call glXMakeCurrent(dpy, 0, 0) to unbind
+        the context from the window before destroying it. -Brian
+          */
+            render_spu.ws.glXMakeCurrent(window->visual->dpy, 0, 0);
+            renderspu_SystemDestroyWindow( window );
+#endif 
+            renderspu_SystemCreateWindow( context->visual, window->visible, window );
+            /*
+            crError("In renderspu_SystemMakeCurrent() window and context"
+                            " weren't created with same visual!");
+            */
+        }
+
+        CRASSERT(context->context);
+
+#if 0
+        if (render_spu.render_to_crut_window) {
+            if (render_spu.crut_drawable == 0) {
+                /* We don't know the X drawable ID yet.  Ask mothership for it. */
+                char response[8096];
+                CRConnection *conn = crMothershipConnect();
+                if (!conn)
+                {
+                    crError("Couldn't connect to the mothership to get CRUT drawable-- "
+                                    "I have no idea what to do!");
+                }
+                crMothershipGetParam( conn, "crut_drawable", response );
+                render_spu.crut_drawable = crStrToInt(response);
+                crMothershipDisconnect(conn);
+
+                crDebug("Render SPU: using CRUT drawable: 0x%x",
+                                render_spu.crut_drawable);
+                if (!render_spu.crut_drawable) {
+                    crDebug("Render SPU: Crut drawable 0 is invalid");
+                    /* Continue with nativeWindow = 0; we'll render to the window that
+                     * we (the Render SPU) previously created.
+                     */
+                }
+            }
+
+            nativeWindow = render_spu.crut_drawable;
+        }
+#endif
+
+        if ((render_spu.render_to_crut_window || render_spu.render_to_app_window)
+                && nativeWindow)
+        {
+            /* We're about to bind the rendering context to a window that we
+             * (the Render SPU) did not create.  The window was created by the
+             * application or the CRUT server.
+             * Make sure the window ID is valid and that the window's X visual is
+             * the same as the rendering context's.
+             */
+            if (WindowExists(window->visual->dpy, nativeWindow))
+            {
+                int vid = GetWindowVisualID(window->visual->dpy, nativeWindow);
+                GLboolean recreated = GL_FALSE;
+
+                /* check that the window's visual and context's visual match */
+                if (vid != (int) context->visual->visual->visualid) {
+                    crWarning("Render SPU: Can't bind context %d to CRUT/native window "
+                                        "0x%x because of different X visuals (0x%x != 0x%x)!",
+                                        context->BltInfo.Base.id, (int) nativeWindow,
+                                        vid, (int) context->visual->visual->visualid);
+                    crWarning("Render SPU: Trying to recreate GLX context to match.");
+                    /* Try to recreate the GLX context so that it uses the same
+                     * GLX visual as the window.
+                     */
+#if !USE_GLX_COPYCONTEXT
+                    if (context->everCurrent) {
+                        get_state(&SavedState);
+                    }
+#endif
+                    renderspu_RecreateContext(context, vid);
+                    recreated = GL_TRUE;
+                }
+
+                /* OK, this should work */
+                window->nativeWindow = (Window) nativeWindow;
+                b = render_spu.ws.glXMakeCurrent( window->visual->dpy,
+                                                  window->nativeWindow,
+                                                  context->context );
+                CRASSERT(b);
+#if !USE_GLX_COPYCONTEXT
+                if (recreated) {
+                    set_state(&SavedState);
+                }
+#endif
+            }
+            else
+            {
+                crWarning("Render SPU: render_to_app/crut_window option is set but "
+                                    "the window ID 0x%x is invalid on the display named %s",
+                                    (unsigned int) nativeWindow,
+                                    DisplayString(window->visual->dpy));
+                CRASSERT(window->window);
+                b = render_spu.ws.glXMakeCurrent( window->visual->dpy,
+                                                  window->window, context->context );
+                CRASSERT(b);
+            }
+        }
+        else
+        {
+            /* This is the normal case - rendering to the render SPU's own window */
+            CRASSERT(window->window);
+#if 0
+            crDebug("calling glXMakecurrent(%p, 0x%x, 0x%x)",
+                                    window->visual->dpy,
+                                    (int) window->window, (int) context->context );
+#endif
+            b = render_spu.ws.glXMakeCurrent( window->visual->dpy,
+                                              window->window, context->context );
+            if (!b) {
+                crWarning("glXMakeCurrent(%p, 0x%x, %p) failed! (winId %d, ctxId %d)",
+                                    window->visual->dpy,
+                                    (int) window->window, (void *) context->context,
+                                    window->BltInfo.Base.id, context->BltInfo.Base.id );
+            }
+            /*CRASSERT(b);*/
+        }
+
+        /* XXX this is a total hack to work around an NVIDIA driver bug */
+#if 0
+        if (render_spu.self.GetFloatv && context->haveWindowPosARB) {
+            GLfloat f[4];
+            render_spu.self.GetFloatv(GL_CURRENT_RASTER_POSITION, f);
+            if (!window->everCurrent || f[1] < 0.0) {
+                crDebug("Render SPU: Resetting raster pos");
+                render_spu.self.WindowPos2iARB(0, 0);
+            }
+        }
+#endif
+    }
+    else
+    {
+        GET_CONTEXT(pCurCtx);
+        if (pCurCtx)
+        {
+            b = render_spu.ws.glXMakeCurrent( pCurCtx->currentWindow->visual->dpy, None, NULL);
+            if (!b) {
+                crWarning("glXMakeCurrent(%p, None, NULL) failed!", pCurCtx->currentWindow->visual->dpy);
+            }
+        }
+
+    }
+}
+
+
+/**
+ * Set window (or pbuffer) size.
+ */
+void
+renderspu_SystemWindowSize( WindowInfo *window, GLint w, GLint h )
+{
+    CRASSERT(window);
+    CRASSERT(window->visual);
+    if (window->visual->visAttribs & CR_PBUFFER_BIT)
+    {
+        /* resizing a pbuffer */
+        if (render_spu.pbufferWidth != 0 || render_spu.pbufferHeight != 0) {
+            /* size limit check */
+            if (w > render_spu.pbufferWidth || h > render_spu.pbufferHeight) {
+                crWarning("Render SPU: Request for %d x %d pbuffer is larger than "
+                                    "the configured size of %d x %d. ('pbuffer_size')",
+                                    w, h, render_spu.pbufferWidth, render_spu.pbufferHeight);
+                return;
+            }
+            /*
+             * If the requested new pbuffer size is greater than 1/2 the size of
+             * the max pbuffer, just use the max pbuffer size.  This helps avoid
+             * problems with VRAM memory fragmentation.  If we run out of VRAM
+             * for pbuffers, some drivers revert to software rendering.  We want
+             * to avoid that!
+             */
+            if (w * h >= render_spu.pbufferWidth * render_spu.pbufferHeight / 2) {
+                /* increase the dimensions to the max pbuffer size now */
+                w = render_spu.pbufferWidth;
+                h = render_spu.pbufferHeight;
+            }
+        }
+
+        if (window->BltInfo.width != w || window->BltInfo.height != h) {
+            /* Only resize if the new dimensions really are different */
+            ContextInfo *currentContext = (ContextInfo *) crGetTSD(&_RenderTSD);
+            /* Can't resize pbuffers, so destroy it and make a new one */
+            render_spu.ws.glXDestroyPbuffer(window->visual->dpy, window->window);
+            window->BltInfo.width = w;
+            window->BltInfo.height = h;
+            crDebug("Render SPU: Creating new %d x %d PBuffer (id=%d)",
+                            w, h, window->BltInfo.Base.id);
+            if (!createPBuffer(window->visual, window)) {
+                crWarning("Render SPU: Unable to create PBuffer (out of VRAM?)!");
+            }
+            else if (currentContext && currentContext->currentWindow == window) {
+                /* Determine if we need to bind the current context to new pbuffer */
+                render_spu.ws.glXMakeCurrent(window->visual->dpy,
+                                             window->window,
+                                             currentContext->context );
+            }
+        }
+    }
+    else {
+        if (!w || !h)
+        {
+            /* X can not handle zero sizes */
+            if (window->visible)
+            {
+                renderspu_SystemShowWindow( window, GL_FALSE );
+            }
+            return;
+        }
+        /* Resize ordinary X window */
+        /*
+         * This is ugly, but it seems to be the only thing that works.
+         * Basically, XResizeWindow() doesn't seem to always take effect
+         * immediately.
+         * Even after an XSync(), the GetWindowAttributes() call will sometimes
+         * return the old window size.  So, we use a loop to repeat the window
+         * resize until it seems to take effect.
+         */
+        int attempt;
+        crDebug("Render SPU: XResizeWindow (%x, %x, %d, %d)", window->visual->dpy, window->window, w, h);
+        XResizeWindow(window->visual->dpy, window->window, w, h);
+        XSync(window->visual->dpy, 0);
+        
+        if (!window->BltInfo.width || !window->BltInfo.height)
+        {
+            /* we have hidden the window instead of sizing it to (0;0) since X is unable to handle zero sizes */
+            if (window->visible)
+            {
+                renderspu_SystemShowWindow( window, GL_TRUE );
+                return;
+            }
+        }
+#if 0
+        for (attempt = 0; attempt < 3; attempt++) { /* try three times max */
+            XWindowAttributes attribs;
+            /* Now, query the window size */
+            XGetWindowAttributes(window->visual->dpy, window->window, &attribs);
+            if (attribs.width == w && attribs.height == h)
+                break;
+            /* sleep for a millisecond and try again */
+            crMsleep(1);
+        }
+#endif
+    }
+}
+
+
+void
+renderspu_SystemGetWindowGeometry( WindowInfo *window,
+                                   GLint *x, GLint *y, GLint *w, GLint *h )
+{
+    CRASSERT(window);
+    CRASSERT(window->visual);
+    CRASSERT(window->window);
+    if (window->visual->visAttribs & CR_PBUFFER_BIT)
+    {
+        *x = 0;
+        *y = 0;
+        *w = window->BltInfo.width;
+        *h = window->BltInfo.height;
+    }
+    else
+    {
+        Window xw, child, root;
+        unsigned int width, height, bw, d;
+        int rx, ry;
+
+        if ((render_spu.render_to_app_window || render_spu.render_to_crut_window)
+                && window->nativeWindow) {
+            xw = window->nativeWindow;
+        }
+        else {
+            xw = window->window;
+        }
+
+        XGetGeometry(window->visual->dpy, xw, &root,
+                                 x, y, &width, &height, &bw, &d);
+
+        /* translate x/y to screen coords */
+        if (!XTranslateCoordinates(window->visual->dpy, xw, root,
+                                   0, 0, &rx, &ry, &child)) {
+            rx = ry = 0;
+        }
+        *x = rx;
+        *y = ry;
+        *w = (int) width;
+        *h = (int) height;
+    }
+}
+
+
+void
+renderspu_SystemGetMaxWindowSize( WindowInfo *window, GLint *w, GLint *h )
+{
+    int scrn;
+
+    CRASSERT(window);
+    CRASSERT(window->visual);
+    CRASSERT(window->window);
+
+    scrn = DefaultScreen(window->visual->dpy);
+    *w = DisplayWidth(window->visual->dpy, scrn);
+    *h = DisplayHeight(window->visual->dpy, scrn);
+}
+
+
+void
+renderspu_SystemWindowPosition( WindowInfo *window, GLint x, GLint y )
+{
+    CRASSERT(window);
+    CRASSERT(window->visual);
+    if ((window->visual->visAttribs & CR_PBUFFER_BIT) == 0)
+    {
+        crDebug("Render SPU: XMoveWindow (%x, %x, %d, %d)", window->visual->dpy, window->window, x, y);
+        XMoveWindow(window->visual->dpy, window->window, x, y);
+        XSync(window->visual->dpy, 0);
+    }
+}
+
+GLboolean renderspu_SystemWindowNeedEmptyPresent(WindowInfo *window)
+{
+    return GL_FALSE;
+}
+
+void
+renderspu_SystemWindowVisibleRegion( WindowInfo *window, GLint cRects, const GLint *pRects )
+{
+    CRASSERT(window);
+    CRASSERT(window->visual);
+    if ((window->visual->visAttribs & CR_PBUFFER_BIT) == 0)
+    {
+        int evb, erb, i;
+        XRectangle *pXRects;
+
+        if (!XShapeQueryExtension(window->visual->dpy, &evb, &erb))
+        {
+            crWarning("Render SPU: Display %s doesn't support SHAPE extension", window->visual->displayName);
+            return;
+        }
+
+        if (cRects>0)
+        {
+            pXRects = (XRectangle *) crAlloc(cRects * sizeof(XRectangle));
+
+            for (i=0; i<cRects; ++i)
+            {
+                pXRects[i].x = (short) pRects[4*i];
+                pXRects[i].y = (short) pRects[4*i+1];
+                pXRects[i].width = (unsigned short) (pRects[4*i+2]-pRects[4*i]);
+                pXRects[i].height = (unsigned short) (pRects[4*i+3]-pRects[4*i+1]);
+            }
+        }
+        else
+        {
+            pXRects = (XRectangle *) crAlloc(sizeof(XRectangle));
+            pXRects[0].x = 0;
+            pXRects[0].y = 0;
+            pXRects[0].width = 0;
+            pXRects[0].height = 0;
+            cRects = 1;
+        }
+
+        crDebug("Render SPU: XShapeCombineRectangles (%x, %x, cRects=%i)", window->visual->dpy, window->window, cRects);
+
+        XShapeCombineRectangles(window->visual->dpy, window->window, ShapeBounding, 0, 0,
+                                pXRects, cRects, ShapeSet, YXBanded);
+        XSync(window->visual->dpy, 0);
+        crFree(pXRects);
+    }
+}
+
+/* Either show or hide the render SPU's window. */
+void
+renderspu_SystemShowWindow( WindowInfo *window, GLboolean showIt )
+{
+    if (window->visual->dpy && window->window &&
+            (window->visual->visAttribs & CR_PBUFFER_BIT) == 0)
+    {
+        if (showIt)
+        {
+            if (window->BltInfo.width && window->BltInfo.height)
+            {
+                XMapWindow( window->visual->dpy, window->window );
+                XSync(window->visual->dpy, 0);
+            }
+        }
+        else
+        {
+            XUnmapWindow( window->visual->dpy, window->window );
+            XSync(window->visual->dpy, 0);
+        }
+    }
+}
+
+void renderspu_SystemVBoxPresentComposition( WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR_ENTRY *pChangedEntry )
+{
+    /* The !render_spu.force_present_main_thread code flow is actually inspired
+     * by cocoa backend impl, here it forces rendering in WinCmd thread rather
+     * than a Main thread.  It defaults to 1, because otherwise there were
+     * 3D driver incompatibilities on some systems. Elsewhere it causes flicker
+     * on NVidia GPUs. In principle would need root cause investigation. */
+    if (!render_spu.force_present_main_thread)
+    {
+        const struct VBOXVR_SCR_COMPOSITOR *pCompositor;
+        /* we do not want to be blocked with the GUI thread here, so only draw here if we are really able to do that w/o blocking */
+        int rc = renderspuVBoxCompositorTryAcquire(window, &pCompositor);
+        if (RT_SUCCESS(rc))
+        {
+            renderspuVBoxPresentCompositionGeneric(window, pCompositor, pChangedEntry, 0, false);
+            renderspuVBoxCompositorRelease(window);
+        }
+        else if (rc != VERR_SEM_BUSY)
+        {
+            /* this is somewhat we do not expect */
+            WARN(("renderspuVBoxCompositorTryAcquire failed rc %d", rc));
+            return;
+        }
+    }
+
+    {
+        Status status;
+        XEvent event;
+        render_spu.self.Flush();
+//        renderspuVBoxPresentBlitterEnsureCreated(window, 0);
+
+        crMemset(&event, 0, sizeof (event));
+        event.type = Expose;
+        event.xexpose.window = window->window;
+        event.xexpose.width = window->BltInfo.width;
+        event.xexpose.height = window->BltInfo.height;
+        status = XSendEvent(render_spu.pCommunicationDisplay, render_spu.WinCmdWindow.window, False, 0, &event);
+        if (!status)
+        {
+            WARN(("XSendEvent returned null"));
+        }
+        XFlush(render_spu.pCommunicationDisplay);
+    }
+}
+
+static void
+MarkWindow(WindowInfo *w)
+{
+    static GC gc = 0;  /* XXX per-window??? */
+    if (!gc) {
+        /* Create a GC for drawing invisible lines */
+        XGCValues gcValues;
+        gcValues.function = GXnoop;
+        gc = XCreateGC(w->visual->dpy, w->nativeWindow, GCFunction, &gcValues);
+    }
+    XDrawLine(w->visual->dpy, w->nativeWindow, gc, 0, 0, w->BltInfo.width, w->BltInfo.height);
+}
+
+
+void
+renderspu_SystemSwapBuffers( WindowInfo *w, GLint flags )
+{
+    CRASSERT(w);
+
+    /* render_to_app_window:
+     * w->nativeWindow will only be non-zero if the
+     * render_spu.render_to_app_window option is true and
+     * MakeCurrent() recorded the nativeWindow handle in the WindowInfo
+     * structure.
+     */
+    if (w->nativeWindow) {
+        render_spu.ws.glXSwapBuffers( w->visual->dpy, w->nativeWindow );
+#if 0
+        MarkWindow(w);
+#else
+        (void) MarkWindow;
+#endif
+    }
+    else {
+        render_spu.ws.glXSwapBuffers( w->visual->dpy, w->window );
+    }
+}
+
+void renderspu_SystemReparentWindow(WindowInfo *window)
+{
+    Window parent;
+
+    parent = render_spu_parent_window_id>0 ? render_spu_parent_window_id : 
+                                             RootWindow(window->visual->dpy, window->visual->visual->screen);
+
+    XReparentWindow(window->visual->dpy, window->window, parent, window->x, window->y);
+    XSync(window->visual->dpy, False);
+}
+
+void renderspu_SystemDefaultSharedContextChanged(ContextInfo *fromContext, ContextInfo *toContext)
+{
+
+}
+
+uint32_t renderspu_SystemPostprocessFunctions(SPUNamedFunctionTable *aFunctions, uint32_t cFunctions, uint32_t cTable)
+{
+    return cFunctions;
+}
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c	(revision 86648)
@@ -0,0 +1,520 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+#include "cr_mem.h"
+#include "cr_spu.h"
+#include "cr_error.h"
+#include "cr_string.h"
+#include "renderspu.h"
+#include <stdio.h>
+
+#include <iprt/env.h>
+
+#ifdef RT_OS_DARWIN
+# include <iprt/semaphore.h>
+#endif /* RT_OS_DARWIN */
+
+static SPUNamedFunctionTable _cr_render_table[1000];
+
+SPUFunctions render_functions = {
+    NULL, /* CHILD COPY */
+    NULL, /* DATA */
+    _cr_render_table /* THE ACTUAL FUNCTIONS */
+};
+
+RenderSPU render_spu;
+uint64_t render_spu_parent_window_id = 0;
+CRtsd _RenderTSD;
+
+#ifdef RT_OS_WINDOWS
+static DWORD WINAPI renderSPUWindowThreadProc(void* unused)
+{
+    MSG msg;
+    BOOL bRet;
+
+    (void) unused;
+
+    /* Force system to create the message queue.
+     * Else, there's a chance that render spu will issue PostThreadMessage
+     * before this thread calls GetMessage for first time.
+     */
+    PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
+
+    crDebug("RenderSPU: Window thread started (%x)", crThreadID());
+    SetEvent(render_spu.hWinThreadReadyEvent);
+
+    while( (bRet = GetMessage( &msg, 0, 0, 0 )) != 0)
+    {
+        if (bRet == -1)
+        {
+            crError("RenderSPU: Window thread GetMessage failed (%x)", GetLastError());
+            break;
+        }
+        else
+        {
+            if (msg.message == WM_VBOX_RENDERSPU_CREATE_WINDOW)
+            {
+                LPCREATESTRUCT pCS = (LPCREATESTRUCT) msg.lParam;
+                HWND hWnd;
+                WindowInfo *pWindow = (WindowInfo *)pCS->lpCreateParams;
+
+                CRASSERT(msg.lParam && !msg.wParam && pCS->lpCreateParams);
+
+                hWnd = CreateWindowEx(pCS->dwExStyle, pCS->lpszName, pCS->lpszClass, pCS->style,
+                                        pCS->x, pCS->y, pCS->cx, pCS->cy,
+                                        pCS->hwndParent, pCS->hMenu, pCS->hInstance, &render_spu);
+
+                pWindow->hWnd = hWnd;
+
+                SetEvent(render_spu.hWinThreadReadyEvent);
+            }
+            else if (msg.message == WM_VBOX_RENDERSPU_DESTROY_WINDOW)
+            {
+                CRASSERT(msg.lParam && !msg.wParam);
+
+                DestroyWindow(((VBOX_RENDERSPU_DESTROY_WINDOW*) msg.lParam)->hWnd);
+
+                SetEvent(render_spu.hWinThreadReadyEvent);
+            }
+            else
+            {
+                TranslateMessage(&msg);
+                DispatchMessage(&msg);
+            }
+        }
+    }
+
+    render_spu.dwWinThreadId = 0;
+
+    crDebug("RenderSPU: Window thread stopped (%x)", crThreadID());
+    SetEvent(render_spu.hWinThreadReadyEvent);
+
+    return 0;
+}
+#endif
+
+int renderspuDefaultCtxInit(void)
+{
+    GLint defaultWin, defaultCtx;
+    WindowInfo *windowInfo;
+
+    /*
+     * Create the default window and context.  Their indexes are zero and
+     * a client can use them without calling CreateContext or WindowCreate.
+     */
+    crDebug("Render SPU: Creating default window (visBits=0x%x, id=0)",
+            render_spu.default_visual);
+    defaultWin = renderspuWindowCreateEx( NULL, render_spu.default_visual, CR_RENDER_DEFAULT_WINDOW_ID );
+    if (defaultWin != CR_RENDER_DEFAULT_WINDOW_ID) {
+        crError("Render SPU: Couldn't get a double-buffered, RGB visual with Z!");
+        return VERR_GENERAL_FAILURE;
+    }
+    crDebug( "Render SPU: WindowCreate returned %d (0=normal)", defaultWin );
+
+    crDebug("Render SPU: Creating default context, visBits=0x%x",
+            render_spu.default_visual );
+    defaultCtx = renderspuCreateContextEx( NULL, render_spu.default_visual, CR_RENDER_DEFAULT_CONTEXT_ID, 0 );
+    if (defaultCtx != CR_RENDER_DEFAULT_CONTEXT_ID) {
+        crError("Render SPU: failed to create default context!");
+        return VERR_GENERAL_FAILURE;
+    }
+
+    renderspuMakeCurrent( defaultWin, 0, defaultCtx );
+
+    /* Get windowInfo for the default window */
+    windowInfo = (WindowInfo *) crHashtableSearch(render_spu.windowTable, CR_RENDER_DEFAULT_WINDOW_ID);
+    CRASSERT(windowInfo);
+    windowInfo->mapPending = GL_TRUE;
+
+    return VINF_SUCCESS;
+}
+
+static SPUFunctions *
+renderSPUInit( int id, SPU *child, SPU *self,
+               unsigned int context_id, unsigned int num_contexts )
+{
+    int numFuncs, numSpecial;
+
+    const char * pcpwSetting;
+    int rc;
+
+    (void) child;
+    (void) context_id;
+    (void) num_contexts;
+
+    self->privatePtr = (void *) &render_spu;
+
+    crDebug("Render SPU: thread-safe");
+    crInitTSD(&_RenderTSD);
+
+    crMemZero(&render_spu, sizeof(render_spu));
+
+    render_spu.id = id;
+    renderspuSetVBoxConfiguration(&render_spu);
+
+    /* Get our special functions. */
+    numSpecial = renderspuCreateFunctions( _cr_render_table );
+
+#ifdef RT_OS_WINDOWS
+    /* Start thread to create windows and process window messages */
+    crDebug("RenderSPU: Starting windows serving thread");
+    render_spu.hWinThreadReadyEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
+    if (!render_spu.hWinThreadReadyEvent)
+    {
+        crError("RenderSPU: Failed to create WinThreadReadyEvent! (%x)", GetLastError());
+        return NULL;
+    }
+
+    if (!CreateThread(NULL, 0, renderSPUWindowThreadProc, 0, 0, &render_spu.dwWinThreadId))
+    {
+        crError("RenderSPU: Failed to start windows thread! (%x)", GetLastError());
+        return NULL;
+    }
+    WaitForSingleObject(render_spu.hWinThreadReadyEvent, INFINITE);
+#endif
+
+    /* Get the OpenGL functions. */
+    numFuncs = crLoadOpenGL( &render_spu.ws, _cr_render_table + numSpecial );
+    if (numFuncs == 0) {
+        crError("The render SPU was unable to load the native OpenGL library");
+        return NULL;
+    }
+
+    numFuncs += numSpecial;
+
+    render_spu.contextTable = crAllocHashtableEx(1, INT32_MAX);
+    render_spu.windowTable = crAllocHashtableEx(1, INT32_MAX);
+
+    render_spu.dummyWindowTable = crAllocHashtable();
+
+    pcpwSetting = RTEnvGet("CR_RENDER_ENABLE_SINGLE_PRESENT_CONTEXT");
+    if (pcpwSetting)
+    {
+        if (pcpwSetting[0] == '0')
+            pcpwSetting = NULL;
+    }
+
+    if (pcpwSetting)
+    {
+        /** @todo need proper blitter synchronization, do not use so far!
+         * the problem is that rendering can be done in multiple thread: the main command (hgcm) thread and the redraw thread
+         * we currently use per-window synchronization, while we'll need a per-blitter synchronization if one blitter is used for multiple windows
+         * this is not done currently */
+        crWarning("TODO: need proper blitter synchronization, do not use so far!");
+        render_spu.blitterTable = crAllocHashtable();
+        CRASSERT(render_spu.blitterTable);
+    }
+    else
+        render_spu.blitterTable = NULL;
+
+    CRASSERT(render_spu.default_visual & CR_RGB_BIT);
+    
+    rc = renderspu_SystemInit();
+    if (!RT_SUCCESS(rc))
+    {
+        crError("renderspu_SystemInit failed rc %d", rc);
+        return NULL;
+    }
+
+    rc = renderspuDefaultCtxInit();
+    if (!RT_SUCCESS(rc))
+    {
+        WARN(("renderspuDefaultCtxInit failed %d", rc));
+        return NULL;
+    }
+
+    /*
+     * Get the OpenGL extension functions.
+     * SIGH -- we have to wait until the very bitter end to load the
+     * extensions, because the context has to be bound before
+     * wglGetProcAddress will work correctly.  No such issue with GLX though.
+     */
+    numFuncs += crLoadOpenGLExtensions( &render_spu.ws, _cr_render_table + numFuncs );
+    CRASSERT(numFuncs < 1000);
+
+#ifdef WINDOWS
+    /*
+     * Same problem as above, these are extensions so we need to
+     * load them after a context has been bound. As they're WGL
+     * extensions too, we can't simply tag them into the spu_loader.
+     * So we do them here for now.
+     * Grrr, NVIDIA driver uses EXT for GetExtensionsStringEXT,
+     * but ARB for others. Need further testing here....
+     */
+    render_spu.ws.wglGetExtensionsStringEXT =
+        (wglGetExtensionsStringEXTFunc_t)
+        render_spu.ws.wglGetProcAddress( "wglGetExtensionsStringEXT" );
+    render_spu.ws.wglChoosePixelFormatEXT =
+        (wglChoosePixelFormatEXTFunc_t)
+        render_spu.ws.wglGetProcAddress( "wglChoosePixelFormatARB" );
+    render_spu.ws.wglGetPixelFormatAttribivEXT =
+        (wglGetPixelFormatAttribivEXTFunc_t)
+        render_spu.ws.wglGetProcAddress( "wglGetPixelFormatAttribivARB" );
+    render_spu.ws.wglGetPixelFormatAttribfvEXT =
+        (wglGetPixelFormatAttribfvEXTFunc_t)
+        render_spu.ws.wglGetProcAddress( "wglGetPixelFormatAttribfvARB" );
+
+    if (render_spu.ws.wglGetProcAddress("glCopyTexSubImage3D"))
+    {
+        _cr_render_table[numFuncs].name = crStrdup("CopyTexSubImage3D");
+        _cr_render_table[numFuncs].fn = (SPUGenericFunction) render_spu.ws.wglGetProcAddress("glCopyTexSubImage3D");
+        ++numFuncs;
+        crDebug("Render SPU: Found glCopyTexSubImage3D function");
+    }
+
+    if (render_spu.ws.wglGetProcAddress("glDrawRangeElements"))
+    {
+        _cr_render_table[numFuncs].name = crStrdup("DrawRangeElements");
+        _cr_render_table[numFuncs].fn = (SPUGenericFunction) render_spu.ws.wglGetProcAddress("glDrawRangeElements");
+        ++numFuncs;
+        crDebug("Render SPU: Found glDrawRangeElements function");
+    }
+
+    if (render_spu.ws.wglGetProcAddress("glTexSubImage3D"))
+    {
+        _cr_render_table[numFuncs].name = crStrdup("TexSubImage3D");
+        _cr_render_table[numFuncs].fn = (SPUGenericFunction) render_spu.ws.wglGetProcAddress("glTexSubImage3D");
+        ++numFuncs;
+        crDebug("Render SPU: Found glTexSubImage3D function");
+    }
+
+    if (render_spu.ws.wglGetProcAddress("glTexImage3D"))
+    {
+        _cr_render_table[numFuncs].name = crStrdup("TexImage3D");
+        _cr_render_table[numFuncs].fn = (SPUGenericFunction) render_spu.ws.wglGetProcAddress("glTexImage3D");
+        ++numFuncs;
+        crDebug("Render SPU: Found glTexImage3D function");
+    }
+
+    if (render_spu.ws.wglGetExtensionsStringEXT) {
+        crDebug("WGL - found wglGetExtensionsStringEXT\n");
+    }
+    if (render_spu.ws.wglChoosePixelFormatEXT) {
+        crDebug("WGL - found wglChoosePixelFormatEXT\n");
+    }
+#endif
+
+    render_spu.barrierHash = crAllocHashtable();
+
+    render_spu.cursorX = 0;
+    render_spu.cursorY = 0;
+    render_spu.use_L2 = 0;
+
+    render_spu.gather_conns = NULL;
+
+    numFuncs = renderspu_SystemPostprocessFunctions(_cr_render_table, numFuncs, RT_ELEMENTS(_cr_render_table));
+
+    crDebug("Render SPU: ---------- End of Init -------------");
+
+    return &render_functions;
+}
+
+static void renderSPUSelfDispatch(SPUDispatchTable *self)
+{
+    crSPUInitDispatchTable( &(render_spu.self) );
+    crSPUCopyDispatchTable( &(render_spu.self), self );
+
+    crSPUInitDispatchTable( &(render_spu.blitterDispatch) );
+    crSPUCopyDispatchTable( &(render_spu.blitterDispatch), self );
+
+    render_spu.server = (CRServer *)(self->server);
+
+    {
+        GLfloat version;
+        version = crStrToFloat((const char *) render_spu.ws.glGetString(GL_VERSION));
+
+        if (version>=2.f || crStrstr((const char*)render_spu.ws.glGetString(GL_EXTENSIONS), "GL_ARB_vertex_shader"))
+        {
+            GLint mu=0;
+            render_spu.self.GetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &mu);
+            crInfo("Render SPU: GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB=%i", mu);
+        }
+    }
+}
+
+
+static void DeleteContextCallback( void *data )
+{
+    ContextInfo *context = (ContextInfo *) data;
+    renderspuContextMarkDeletedAndRelease(context);
+}
+
+static void DeleteWindowCallback( void *data )
+{
+    WindowInfo *window = (WindowInfo *) data;
+    renderspuWinTermOnShutdown(window);
+    renderspuWinRelease(window);
+}
+
+static void DeleteBlitterCallback( void *data )
+{
+    PCR_BLITTER pBlitter = (PCR_BLITTER) data;
+    CrBltTerm(pBlitter);
+    crFree(pBlitter);
+}
+
+static void renderspuBlitterCleanupCB(unsigned long key, void *data1, void *data2)
+{
+    WindowInfo *window = (WindowInfo *) data1;
+    CRASSERT(window);
+
+    RT_NOREF(key, data2);
+
+    renderspuVBoxPresentBlitterCleanup( window );
+}
+
+
+static void renderspuDeleteBlitterCB(unsigned long key, void *data1, void *data2)
+{
+    CRHashTable *pTbl = (CRHashTable*)data2;
+
+    crHashtableDelete( pTbl, key, NULL );
+
+    DeleteBlitterCallback(data1);
+}
+
+
+static void renderspuDeleteWindowCB(unsigned long key, void *data1, void *data2)
+{
+    CRHashTable *pTbl = (CRHashTable*)data2;
+
+    crHashtableDelete( pTbl, key, NULL );
+
+    DeleteWindowCallback(data1);
+}
+
+static void renderspuDeleteBarierCB(unsigned long key, void *data1, void *data2)
+{
+    CRHashTable *pTbl = (CRHashTable*)data2;
+
+    crHashtableDelete( pTbl, key, NULL );
+
+    crFree(data1);
+}
+
+
+static void renderspuDeleteContextCB(unsigned long key, void *data1, void *data2)
+{
+    CRHashTable *pTbl = (CRHashTable*)data2;
+
+    crHashtableDelete( pTbl, key, NULL );
+
+    DeleteContextCallback(data1);
+}
+
+void renderspuCleanupBase(bool fDeleteTables)
+{
+    renderspuVBoxCompositorClearAll();
+
+    if (render_spu.blitterTable)
+    {
+        if (fDeleteTables)
+        {
+            crFreeHashtable(render_spu.blitterTable, DeleteBlitterCallback);
+            render_spu.blitterTable = NULL;
+        }
+        else
+        {
+            crHashtableWalk(render_spu.blitterTable, renderspuDeleteBlitterCB, render_spu.contextTable);
+        }
+    }
+    else
+    {
+        crHashtableWalk(render_spu.windowTable, renderspuBlitterCleanupCB, NULL);
+
+        crHashtableWalk(render_spu.dummyWindowTable, renderspuBlitterCleanupCB, NULL);
+    }
+
+    renderspuSetDefaultSharedContext(NULL);
+
+    if (fDeleteTables)
+    {
+        crFreeHashtable(render_spu.contextTable, DeleteContextCallback);
+        render_spu.contextTable = NULL;
+        crFreeHashtable(render_spu.windowTable, DeleteWindowCallback);
+        render_spu.windowTable = NULL;
+        crFreeHashtable(render_spu.dummyWindowTable, DeleteWindowCallback);
+        render_spu.dummyWindowTable = NULL;
+        crFreeHashtable(render_spu.barrierHash, crFree);
+        render_spu.barrierHash = NULL;
+    }
+    else
+    {
+        crHashtableWalk(render_spu.contextTable, renderspuDeleteContextCB, render_spu.contextTable);
+        crHashtableWalk(render_spu.windowTable, renderspuDeleteWindowCB, render_spu.windowTable);
+        crHashtableWalk(render_spu.dummyWindowTable, renderspuDeleteWindowCB, render_spu.dummyWindowTable);
+        crHashtableWalk(render_spu.barrierHash, renderspuDeleteBarierCB, render_spu.barrierHash);
+    }
+}
+
+static int renderSPUCleanup(void)
+{
+    renderspuCleanupBase(true);
+
+#ifdef RT_OS_WINDOWS
+    if (render_spu.dwWinThreadId)
+    {
+        HANDLE hNative;
+
+        hNative = OpenThread(SYNCHRONIZE|THREAD_QUERY_INFORMATION|THREAD_TERMINATE,
+                             false, render_spu.dwWinThreadId);
+        if (!hNative)
+        {
+            crWarning("Failed to get handle for window thread(%#x)", GetLastError());
+        }
+
+        if (PostThreadMessage(render_spu.dwWinThreadId, WM_QUIT, 0, 0))
+        {
+            WaitForSingleObject(render_spu.hWinThreadReadyEvent, INFINITE);
+
+            /*wait for os thread to actually finish*/
+            if (hNative && WaitForSingleObject(hNative, 3000)==WAIT_TIMEOUT)
+            {
+                crDebug("Wait failed, terminating");
+                if (!TerminateThread(hNative, 1))
+                {
+                    crWarning("TerminateThread failed");
+                }
+            }
+        }
+
+        if (hNative)
+        {
+            CloseHandle(hNative);
+        }
+    }
+    CloseHandle(render_spu.hWinThreadReadyEvent);
+    render_spu.hWinThreadReadyEvent = NULL;
+#endif
+
+    crUnloadOpenGL();
+
+    crFreeTSD(&_RenderTSD);
+    return 1;
+}
+
+
+DECLHIDDEN(void) renderspuSetWindowId(uint64_t winId)
+{
+    render_spu_parent_window_id = winId;
+    crDebug("Set new parent window %p (no actual reparent performed)", winId);
+}
+
+DECLHIDDEN(const SPUREG) g_RenderSpuReg =
+{
+    /** pszName. */
+    "render",
+    /** pszSuperName. */
+    NULL,
+    /** fFlags. */
+    SPU_NO_PACKER | SPU_IS_TERMINAL | SPU_MAX_SERVERS_ZERO,
+    /** pfnInit. */
+    renderSPUInit,
+    /** pfnDispatch. */
+    renderSPUSelfDispatch, 
+    /** pfnCleanup. */
+    renderSPUCleanup
+};
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c	(revision 86648)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c	(revision 86648)
@@ -0,0 +1,1747 @@
+/* Copyright (c) 2001, Stanford University
+ * All rights reserved
+ *
+ * See the file LICENSE.txt for information on redistributing this software.
+ */
+
+
+#define WIN32_LEAN_AND_MEAN
+#include <iprt/win/windows.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <memory.h>
+
+#include "cr_error.h"
+#include "cr_string.h"
+#include "renderspu.h"
+#include "cr_mem.h"
+
+#include <iprt/env.h>
+
+/* IAT patcher stuff */
+#define RVA2PTR(_t, _base, _off) ((_t*)(((uint8_t*)(_base)) + (_off)))
+
+int renderspuIatPatcherGetImportAddress(HMODULE hModule, LPCSTR pszLib, LPCSTR pszName, void** ppAdr)
+{
+    PIMAGE_DOS_HEADER pDosHdr = (PIMAGE_DOS_HEADER)hModule;
+    PIMAGE_NT_HEADERS pNtHdr;
+    PIMAGE_IMPORT_DESCRIPTOR pImportDr;
+    DWORD rvaImport;
+
+    crDebug("searching entry %s from %s", pszName, pszLib);
+
+    *ppAdr = 0;
+
+    if (pDosHdr->e_magic != IMAGE_DOS_SIGNATURE)
+    {
+        crWarning("invalid dos signature");
+        return VERR_INVALID_HANDLE;
+    }
+    pNtHdr = RVA2PTR(IMAGE_NT_HEADERS, pDosHdr, pDosHdr->e_lfanew);
+    if (pNtHdr->Signature != IMAGE_NT_SIGNATURE)
+    {
+        crWarning("invalid nt signature");
+        return VERR_INVALID_HANDLE;
+    }
+    rvaImport = pNtHdr->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
+    if (!rvaImport)
+    {
+        crWarning("no imports found");
+        return VERR_NOT_FOUND;
+    }
+    pImportDr =  RVA2PTR(IMAGE_IMPORT_DESCRIPTOR, pDosHdr, rvaImport);
+
+    for ( ;pImportDr->TimeDateStamp != 0 || pImportDr->Name != 0; ++pImportDr)
+    {
+        DWORD rvaINT, rvaIAT;
+        PIMAGE_THUNK_DATA pINT, pIAT;
+        LPCSTR pszLibCur = RVA2PTR(char, pDosHdr, pImportDr->Name);
+        if (stricmp(pszLibCur, pszLib))
+            continue;
+
+        /* got the necessary lib! */
+        crDebug("got info for lib");
+
+        rvaINT = pImportDr->OriginalFirstThunk;
+        rvaIAT = pImportDr->FirstThunk;
+
+        if (!rvaINT  || !rvaIAT)
+        {
+            crWarning("either rvaINT(0x%x) or rvaIAT(0x%x) are NULL, nothing found!", rvaINT, rvaIAT);
+            return VERR_NOT_FOUND;
+        }
+
+        pINT = RVA2PTR(IMAGE_THUNK_DATA, pDosHdr, rvaINT);
+        pIAT = RVA2PTR(IMAGE_THUNK_DATA, pDosHdr, rvaIAT);
+
+        for ( ; pINT->u1.AddressOfData; ++pINT, ++pIAT)
+        {
+            PIMAGE_IMPORT_BY_NAME pIbn;
+
+            if (IMAGE_SNAP_BY_ORDINAL(pINT->u1.Ordinal))
+                continue;
+
+            pIbn = RVA2PTR(IMAGE_IMPORT_BY_NAME, pDosHdr, pINT->u1.AddressOfData);
+
+            if (stricmp(pszName, (char*)pIbn->Name))
+                continue;
+
+            *ppAdr = &pIAT->u1.Function;
+
+            crDebug("search succeeded!");
+            return VINF_SUCCESS;
+        }
+    }
+
+    crDebug("not found");
+    return VERR_NOT_FOUND;
+}
+
+int renderspuIatPatcherPatchEntry(void *pvEntry, PFNRT pfnValue, PFNRT *ppfnOldVal)
+{
+    PFNRT *ppfn = (PFNRT *)pvEntry;
+    DWORD dwOldProtect = 0;
+
+    if (!VirtualProtect(pvEntry, sizeof (pvEntry), PAGE_READWRITE, &dwOldProtect))
+    {
+        crWarning("VirtualProtect 1 failed, %d", GetLastError());
+        return VERR_ACCESS_DENIED;
+    }
+
+    if (ppfnOldVal)
+        *ppfnOldVal = *ppfn;
+    *ppfn = pfnValue;
+
+    if (!VirtualProtect(pvEntry, sizeof (pvEntry), dwOldProtect, &dwOldProtect))
+    {
+        crWarning("VirtualProtect 2 failed, %d.. ignoring", GetLastError());
+    }
+
+    return VINF_SUCCESS;
+}
+
+
+int renderspuIatPatcherPatchFunction(HMODULE hModule, LPCSTR pszLib, LPCSTR pszName, PFNRT pfn)
+{
+    void* pAdr;
+    int rc = renderspuIatPatcherGetImportAddress(hModule, pszLib, pszName, &pAdr);
+    if (RT_FAILURE(rc))
+    {
+        crDebug("renderspuIatPatcherGetImportAddress failed, %d", rc);
+        return rc;
+    }
+
+    rc = renderspuIatPatcherPatchEntry(pAdr, pfn, NULL);
+    if (RT_FAILURE(rc))
+    {
+        crWarning("renderspuIatPatcherPatchEntry failed, %d", rc);
+        return rc;
+    }
+
+    return VINF_SUCCESS;
+}
+
+/* patch */
+static HWND __stdcall renderspuAtiQuirk_GetForegroundWindow(void)
+{
+    crDebug("renderspuAtiQuirk_GetForegroundWindow");
+    return NULL;
+}
+
+
+#define CRREG_MAXKEYNAME 8
+static int renderspuAtiQuirk_GetICDDriverList(char *pBuf, DWORD cbBuf, DWORD *pcbResult)
+{
+    static LPCSTR aValueNames[] = {"OpenGLVendorName", "OpenGLDriverName"};
+    char *pBufPos = pBuf;
+    DWORD cbBufRemain = cbBuf, cbTotal = 0;
+    HKEY hKey, hSubkey;
+    DWORD dwIndex = 0;
+    int i;
+    int rc = VINF_SUCCESS;
+    char NameBuf[CRREG_MAXKEYNAME];
+    LONG lRc;
+
+    if (pcbResult)
+        *pcbResult = 0;
+
+    lRc = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+            "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}",
+            0, /* reserved*/
+            KEY_READ,
+            &hKey);
+    if (ERROR_SUCCESS != lRc)
+    {
+        crDebug("RegOpenKeyEx 1 failed, %d", lRc);
+        return VERR_OPEN_FAILED;
+    }
+
+    for ( ; ; ++dwIndex)
+    {
+        lRc = RegEnumKeyA(hKey, dwIndex, NameBuf, CRREG_MAXKEYNAME);
+        if (lRc == ERROR_NO_MORE_ITEMS)
+            break;
+        if (lRc == ERROR_MORE_DATA)
+            continue;
+        if (lRc != ERROR_SUCCESS)
+        {
+            crWarning("RegEnumKeyA failed, %d", lRc);
+            continue;
+        }
+
+        lRc = RegOpenKeyEx(hKey,
+                NameBuf,
+                0, /* reserved*/
+                KEY_READ,
+                &hSubkey);
+        if (ERROR_SUCCESS != lRc)
+        {
+            crDebug("RegOpenKeyEx 2 failed, %d", lRc);
+            RegCloseKey(hKey);
+            return VERR_OPEN_FAILED;
+        }
+
+        for (i = 0; i < RT_ELEMENTS(aValueNames); ++i)
+        {
+            DWORD cbCur = cbBufRemain;
+            DWORD type;
+            lRc = RegQueryValueExA(hSubkey, aValueNames[i], NULL, /* reserved*/
+                    &type,
+                    (PBYTE)pBufPos, &cbCur);
+            /* exclude second null termination */
+            --cbCur;
+
+            if (ERROR_MORE_DATA == lRc)
+            {
+                if (REG_MULTI_SZ != type)
+                {
+                    crWarning("unexpected data type! %d", type);
+                    continue;
+                }
+                rc = VERR_BUFFER_OVERFLOW;
+                pBufPos = NULL;
+                cbBufRemain = 0;
+                CRASSERT(cbCur > 0 && cbCur < UINT32_MAX/2);
+                cbTotal += cbCur;
+                continue;
+            }
+            if (ERROR_SUCCESS != lRc)
+            {
+                crDebug("RegQueryValueExA failed, %d", lRc);
+                continue;
+            }
+
+            if (REG_MULTI_SZ != type)
+            {
+                crWarning("unexpected data type! %d", type);
+                continue;
+            }
+
+            /* succeeded */
+            CRASSERT(cbCur > 0 && cbCur < UINT32_MAX/2);
+            pBufPos += cbCur;
+            cbBufRemain -= cbCur;
+            cbTotal += cbCur;
+            CRASSERT(cbBufRemain < UINT32_MAX/2);
+        }
+
+        RegCloseKey(hSubkey);
+    }
+
+    RegCloseKey(hKey);
+
+    if (cbTotal)
+    {
+        /* include second null termination */
+        CRASSERT(!pBufPos || pBufPos[0] == '\0');
+        ++cbTotal;
+    }
+
+    if (pcbResult)
+        *pcbResult = cbTotal;
+
+    return rc;
+}
+
+static int renderspuAtiQuirk_ApplyForModule(LPCSTR pszAtiDll)
+{
+    int rc;
+    HMODULE hAtiDll;
+
+    crDebug("renderspuAtiQuirk_ApplyForModule (%s)", pszAtiDll);
+
+    hAtiDll = GetModuleHandleA(pszAtiDll);
+    if (!hAtiDll)
+    {
+        crDebug("GetModuleHandle failed, %d", GetLastError());
+        return VERR_NOT_FOUND;
+    }
+
+    rc = renderspuIatPatcherPatchFunction(hAtiDll, "user32.dll", "GetForegroundWindow", (PFNRT)renderspuAtiQuirk_GetForegroundWindow);
+    if (RT_FAILURE(rc))
+    {
+        crDebug("renderspuIatPatcherPatchFunction failed, %d", rc);
+        return rc;
+    }
+
+    crDebug("renderspuAtiQuirk_ApplyForModule SUCCEEDED!");
+    crInfo("ATI Fullscreen quirk patch SUCCEEDED!");
+
+    return VINF_SUCCESS;
+}
+
+static LPCSTR renderspuRegMultiSzNextVal(LPCSTR pszBuf)
+{
+    pszBuf += strlen(pszBuf) + sizeof (pszBuf[0]);
+
+    if (pszBuf[0] == '\0')
+        return NULL;
+
+    return pszBuf;
+}
+
+static LPCSTR renderspuRegMultiSzCurVal(LPCSTR pszBuf)
+{
+    if (pszBuf[0] == '\0')
+        return NULL;
+
+    return pszBuf;
+}
+
+
+static int renderspuAtiQuirk_Apply(void)
+{
+    char aBuf[4096];
+    DWORD cbResult = 0;
+    LPCSTR pszVal;
+    int rc;
+
+    crDebug("renderspuAtiQuirk_Apply..");
+
+    rc = renderspuAtiQuirk_GetICDDriverList(aBuf, sizeof (aBuf), &cbResult);
+    if (RT_FAILURE(rc))
+    {
+        crDebug("renderspuAtiQuirk_GetICDDriverList failed, rc(%d)", rc);
+        return rc;
+    }
+
+    for (pszVal = renderspuRegMultiSzCurVal(aBuf);
+            pszVal;
+            pszVal = renderspuRegMultiSzNextVal(pszVal))
+    {
+        renderspuAtiQuirk_ApplyForModule(pszVal);
+    }
+
+    return VINF_SUCCESS;
+}
+
+static GLboolean renderspuAtiQuirk_Needed(void)
+{
+    const char * pszString = (const char *)render_spu.ws.glGetString(GL_VENDOR);
+    if (pszString && strstr(pszString, "ATI"))
+        return GL_TRUE;
+    pszString = (const char *)render_spu.ws.glGetString(GL_RENDERER);
+    if (pszString && strstr(pszString, "ATI"))
+        return GL_TRUE;
+    return GL_FALSE;
+}
+
+static void renderspuAtiQuirk_ChkApply(void)
+{
+    static GLboolean fChecked = GL_FALSE;
+    if (fChecked)
+        return;
+
+    fChecked = GL_TRUE;
+    if (!renderspuAtiQuirk_Needed())
+        return;
+
+    crInfo("This is an ATI card, taking care of fullscreen..");
+
+    /*
+     * ATI WDDM-based graphics have an issue with rendering fullscreen.
+     * See public tickets #9775 & #9267 .
+     * Namely ATI drivers check whether ogl window is foreground and fullscreen
+     * and if so - do D3DKMTSetDisplayMode for ogl surface,
+     * which prevented any other data from being displayed, no matter what.
+     *
+     * Here we check whether we're using an ATI card and if so, patch the ogl ICD driver's IAT
+     * to replace GetForegroundWindow reference with our renderspuAtiQuirk_GetForegroundWindow,
+     * which always returns NULL.
+     */
+    renderspuAtiQuirk_Apply();
+}
+
+#define WINDOW_NAME window->title
+
+static BOOL
+bSetupPixelFormat( HDC hdc, GLbitfield visAttribs );
+
+GLboolean renderspu_SystemInitVisual( VisualInfo *visual )
+{
+    if (visual->visAttribs & CR_PBUFFER_BIT) {
+        crWarning("Render SPU: PBuffers not support on Windows yet.");
+    }
+
+    /* In the windows world, we need a window before a context.
+     * Use the device_context as a marker to do just that */
+
+    return TRUE;
+}
+
+void renderspu_SystemDestroyWindow( WindowInfo *window )
+{
+    VBOX_RENDERSPU_DESTROY_WINDOW vrdw;
+
+    CRASSERT(window);
+
+    /*DestroyWindow( window->hWnd );*/
+
+    vrdw.hWnd = window->hWnd;
+
+    if (render_spu.dwWinThreadId)
+    {
+        PostThreadMessage(render_spu.dwWinThreadId, WM_VBOX_RENDERSPU_DESTROY_WINDOW, 0, (LPARAM) &vrdw);
+        WaitForSingleObject(render_spu.hWinThreadReadyEvent, INFINITE);
+    }
+    else
+    {
+        crError("Render SPU: window thread is not running");
+    }
+
+    window->hWnd = NULL;
+    window->visual = NULL;
+    if (window->hRgn)
+    {
+        DeleteObject(window->hRgn);
+        window->hRgn = NULL;
+    }
+}
+
+static LONG WINAPI
+MainWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    /* int w,h; */
+
+    switch ( uMsg ) {
+        case WM_PAINT:
+        {
+            WindowInfo *pWindow = (WindowInfo *)GetWindowLongPtr(hWnd, GWLP_USERDATA);
+            if (pWindow)
+            {
+                const struct VBOXVR_SCR_COMPOSITOR * pCompositor;
+
+                pCompositor = renderspuVBoxCompositorAcquire(pWindow);
+                if (pCompositor)
+                {
+                    HDC hDC;
+                    PAINTSTRUCT Paint;
+
+                    Assert(pWindow->device_context);
+                    hDC = BeginPaint(pWindow->hWnd, &Paint);
+                    if (hDC)
+                    {
+                        BOOL bRc;
+                        pWindow->redraw_device_context = hDC;
+
+                        renderspuVBoxPresentCompositionGeneric(pWindow, pCompositor, NULL, 1, true);
+
+                        bRc = EndPaint(pWindow->hWnd, &Paint);
+
+                        pWindow->redraw_device_context = NULL;
+
+                        renderspuVBoxCompositorRelease(pWindow);
+
+                        if (!bRc)
+                        {
+                            DWORD winEr = GetLastError();
+                            crWarning("EndPaint failed, winEr %d", winEr);
+                        }
+                    }
+                    else
+                    {
+                        DWORD winEr = GetLastError();
+                        crWarning("BeginPaint failed, winEr %d", winEr);
+                    }
+                }
+            }
+            break;
+        }
+        case WM_SIZE:
+            /* w = LOWORD( lParam ); 
+             * h = HIWORD( lParam ); */
+
+            /* glViewport( 0, 0, w, h ); */
+#if 0
+            glViewport( -render_spu.mural_x, -render_spu.mural_y, 
+                    render_spu.mural_width, render_spu.mural_height );
+            glScissor( -render_spu.mural_x, -render_spu.mural_y, 
+                    render_spu.mural_width, render_spu.mural_height );
+#endif
+            break;
+
+        case WM_CLOSE:
+            crWarning( "Render SPU: caught WM_CLOSE -- quitting." );
+            exit( 0 );
+            break;
+
+        case WM_DESTROY:
+            crDebug("Render SPU: caught WM_DESTROY for our window %x", hWnd);
+            break;
+
+        case WM_NCHITTEST:
+            crDebug("WM_NCHITTEST");
+            return HTNOWHERE;
+    }
+
+    return DefWindowProc( hWnd, uMsg, wParam, lParam );
+}
+
+static BOOL
+bSetupPixelFormatEXT( HDC hdc, GLbitfield visAttribs)
+{
+    PIXELFORMATDESCRIPTOR ppfd;
+    int pixelFormat;
+    int attribList[100];
+    float fattribList[] = { 0.0, 0.0 };
+    unsigned numFormats;
+    int i = 0;
+    BOOL vis;
+
+    CRASSERT(visAttribs & CR_RGB_BIT);  /* anybody need color index */
+
+    crWarning("Render SPU: Using WGL_EXT_pixel_format to select visual ID.");
+
+    attribList[i++] = WGL_DRAW_TO_WINDOW_EXT;
+    attribList[i++] = GL_TRUE;
+    attribList[i++] = WGL_ACCELERATION_EXT;
+    attribList[i++] = WGL_FULL_ACCELERATION_EXT;
+    attribList[i++] = WGL_COLOR_BITS_EXT;
+    attribList[i++] = 24;
+    attribList[i++] = WGL_RED_BITS_EXT;
+    attribList[i++] = 1;
+    attribList[i++] = WGL_GREEN_BITS_EXT;
+    attribList[i++] = 1;
+    attribList[i++] = WGL_BLUE_BITS_EXT;
+    attribList[i++] = 1;
+
+    crWarning("Render SPU: Visual chosen is... RGB");
+
+    if (visAttribs & CR_ALPHA_BIT)
+    {
+        attribList[i++] = WGL_ALPHA_BITS_EXT;
+        attribList[i++] = 1;
+        crWarning("A");
+    }
+
+    crWarning(", ");
+
+    if (visAttribs & CR_DOUBLE_BIT) {
+        attribList[i++] = WGL_DOUBLE_BUFFER_EXT;
+        attribList[i++] = GL_TRUE;
+        crWarning("DB, ");
+    }
+
+    if (visAttribs & CR_STEREO_BIT) {
+        attribList[i++] = WGL_STEREO_EXT;
+        attribList[i++] = GL_TRUE;
+        crWarning("Stereo, ");
+    }
+
+    if (visAttribs & CR_DEPTH_BIT)
+    {
+        attribList[i++] = WGL_DEPTH_BITS_EXT;
+        attribList[i++] = 1;
+        crWarning("Z, ");
+    }
+
+    if (visAttribs & CR_STENCIL_BIT)
+    {
+        attribList[i++] = WGL_STENCIL_BITS_EXT;
+        attribList[i++] = 1;
+        crWarning("Stencil, ");
+    }
+
+    if (visAttribs & CR_ACCUM_BIT)
+    {
+        attribList[i++] = WGL_ACCUM_RED_BITS_EXT;
+        attribList[i++] = 1;
+        attribList[i++] = WGL_ACCUM_GREEN_BITS_EXT;
+        attribList[i++] = 1;
+        attribList[i++] = WGL_ACCUM_BLUE_BITS_EXT;
+        attribList[i++] = 1;
+        crWarning("Accum, ");
+        if (visAttribs & CR_ALPHA_BIT)
+        {
+            attribList[i++] = WGL_ACCUM_ALPHA_BITS_EXT;
+            attribList[i++] = 1;
+            crWarning("Accum Alpha, ");
+        }
+    }
+
+    if (visAttribs & CR_MULTISAMPLE_BIT)
+    {
+        attribList[i++] = WGL_SAMPLE_BUFFERS_EXT;
+        attribList[i++] = 1;
+        attribList[i++] = WGL_SAMPLES_EXT;
+        attribList[i++] = 4;
+        crWarning("Multisample, ");
+    }
+
+    crWarning("\n");
+
+    /* End the list */
+    attribList[i++] = 0;
+    attribList[i++] = 0;
+
+    vis = render_spu.ws.wglChoosePixelFormatEXT( hdc, attribList, fattribList, 1, &pixelFormat, &numFormats);
+
+    crDebug("Render SPU: wglChoosePixelFormatEXT (vis 0x%x, LastError 0x%x, pixelFormat 0x%x", vis, GetLastError(), pixelFormat);
+
+#ifdef VBOX_CR_SERVER_FORCE_WGL
+    render_spu.ws.wglSetPixelFormat( hdc, pixelFormat, &ppfd );
+#else
+    SetPixelFormat( hdc, pixelFormat, &ppfd );
+#endif
+
+    crDebug("Render SPU: wglSetPixelFormat (Last error 0x%x)", GetLastError());
+
+    return vis;
+}
+
+static BOOL
+bSetupPixelFormatNormal( HDC hdc, GLbitfield visAttribs )
+{
+    PIXELFORMATDESCRIPTOR pfd = { 
+        sizeof(PIXELFORMATDESCRIPTOR),  /*  size of this pfd */
+        1,                              /* version number */
+        PFD_DRAW_TO_WINDOW |            /* support window */
+        PFD_SUPPORT_OPENGL,             /* support OpenGL */
+        PFD_TYPE_RGBA,                  /* RGBA type */
+        24,                             /* 24-bit color depth */
+        0, 0, 0, 0, 0, 0,               /* color bits ignored */
+        0,                              /* no alpha buffer */
+        0,                              /* shift bit ignored */
+        0,                              /* no accumulation buffer */
+        0, 0, 0, 0,                     /* accum bits ignored */
+        0,                              /* set depth buffer  */
+        0,                              /* set stencil buffer */
+        0,                              /* no auxiliary buffer */
+        PFD_MAIN_PLANE,                 /* main layer */
+        0,                              /* reserved */
+        0, 0, 0                         /* layer masks ignored */
+    }; 
+    PIXELFORMATDESCRIPTOR *ppfd = &pfd; 
+    char s[1000];
+    GLbitfield b = 0;
+    int pixelformat;
+
+    renderspuMakeVisString( visAttribs, s );
+
+    crDebug( "Render SPU: WGL wants these visual capabilities: %s", s);
+
+    /* These really come into play with sort-last configs */
+    if (visAttribs & CR_DEPTH_BIT)
+        ppfd->cDepthBits = 24;
+    if (visAttribs & CR_ACCUM_BIT)
+        ppfd->cAccumBits = 16;
+    if (visAttribs & CR_RGB_BIT)
+        ppfd->cColorBits = 24;
+    if (visAttribs & CR_STENCIL_BIT)
+        ppfd->cStencilBits = 8;
+    if (visAttribs & CR_ALPHA_BIT)
+        ppfd->cAlphaBits = 8;
+    if (visAttribs & CR_DOUBLE_BIT)
+        ppfd->dwFlags |= PFD_DOUBLEBUFFER;
+    if (visAttribs & CR_STEREO_BIT)
+        ppfd->dwFlags |= PFD_STEREO;
+
+    /* 
+     * We call the wgl functions directly if the SPU was loaded
+     * by our faker library, otherwise we have to call the GDI
+     * versions.
+     */
+#ifdef VBOX_CR_SERVER_FORCE_WGL
+    if (RTEnvGet( "CR_WGL_DO_NOT_USE_GDI" ) != NULL)
+    {
+        pixelformat = render_spu.ws.wglChoosePixelFormat( hdc, ppfd );
+        /* doing this twice is normal Win32 magic */
+        pixelformat = render_spu.ws.wglChoosePixelFormat( hdc, ppfd );
+        if ( pixelformat == 0 ) 
+        {
+            crError( "render_spu.ws.wglChoosePixelFormat failed" );
+        }
+        if ( !render_spu.ws.wglSetPixelFormat( hdc, pixelformat, ppfd ) ) 
+        {
+            crError( "render_spu.ws.wglSetPixelFormat failed" );
+        }
+    
+        render_spu.ws.wglDescribePixelFormat( hdc, pixelformat, sizeof(*ppfd), ppfd );
+    }
+    else
+#endif
+    {
+        /* Okay, we were loaded manually.  Call the GDI functions. */
+        pixelformat = ChoosePixelFormat( hdc, ppfd );
+        /* doing this twice is normal Win32 magic */
+        pixelformat = ChoosePixelFormat( hdc, ppfd );
+        if ( pixelformat == 0 ) 
+        {
+            crError( "ChoosePixelFormat failed" );
+        }
+        if ( !SetPixelFormat( hdc, pixelformat, ppfd ) ) 
+        {
+            crError( "SetPixelFormat failed (Error 0x%x)", GetLastError() );
+        }
+        
+        DescribePixelFormat( hdc, pixelformat, sizeof(*ppfd), ppfd );
+    }
+
+
+    if (ppfd->cDepthBits > 0)
+        b |= CR_DEPTH_BIT;
+    if (ppfd->cAccumBits > 0)
+        b |= CR_ACCUM_BIT;
+    if (ppfd->cColorBits > 8)
+        b |= CR_RGB_BIT;
+    if (ppfd->cStencilBits > 0)
+        b |= CR_STENCIL_BIT;
+    if (ppfd->cAlphaBits > 0)
+        b |= CR_ALPHA_BIT;
+    if (ppfd->dwFlags & PFD_DOUBLEBUFFER)
+        b |= CR_DOUBLE_BIT;
+    if (ppfd->dwFlags & PFD_STEREO)
+        b |= CR_STEREO_BIT;
+
+    renderspuMakeVisString( b, s );
+
+    crDebug( "Render SPU: WGL chose these visual capabilities: %s", s);
+    return TRUE;
+}
+
+static BOOL
+bSetupPixelFormat( HDC hdc, GLbitfield visAttribs )
+{
+    /* According to http://www.opengl.org/resources/faq/technical/mswindows.htm
+       we shouldn't be using wgl functions to setup pixel formats unless we're loading ICD driver.
+       In particular, bSetupPixelFormatEXT bugs with Intel drivers.
+     */
+    return bSetupPixelFormatNormal(hdc, visAttribs);
+}
+
+GLboolean renderspu_SystemCreateWindow( VisualInfo *visual, GLboolean showIt, WindowInfo *window )
+{
+    HDESK     desktop;
+    HINSTANCE hinstance;
+    WNDCLASS  wc;
+    DWORD     window_style;
+    int       window_plus_caption_width;
+    int       window_plus_caption_height;
+
+    window->hRgn = NULL;
+    window->visual = visual;
+    window->nativeWindow = 0;
+
+    if ( render_spu.use_L2 )
+    {
+        crWarning( "Going fullscreen because we think we're using Lightning-2." );
+        render_spu.fullscreen = 1;
+    }
+
+    /*
+     * Begin Windows / WGL code
+     */
+
+    hinstance = GetModuleHandle( NULL );
+    if (!hinstance)
+    {
+        crError( "Render SPU: Couldn't get a handle to my module." );
+        return GL_FALSE;
+    }
+    crDebug( "Render SPU: Got the module handle: 0x%x", hinstance );
+
+    /* If we were launched from a service, telnet, or rsh, we need to
+     * get the input desktop.  */
+
+    desktop = OpenInputDesktop( 0, FALSE,
+            DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW |
+            DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL |
+            DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS |
+            DESKTOP_SWITCHDESKTOP | GENERIC_WRITE );
+
+    if ( !desktop )
+    {
+        crError( "Render SPU: Couldn't acquire input desktop" );
+        return GL_FALSE;
+    }
+    crDebug( "Render SPU: Got the desktop: 0x%x", desktop );
+
+    if ( !SetThreadDesktop( desktop ) )
+    {
+        /* If this function fails, it's probably because 
+         * it's already been called (i.e., the render SPU 
+         * is bolted to an application?) */
+
+        /*crError( "Couldn't set thread to input desktop" ); */
+    }
+    crDebug( "Render SPU: Set the thread desktop -- this might have failed." );
+
+    if ( !GetClassInfo(hinstance, WINDOW_NAME, &wc) ) 
+    {
+        wc.style = CS_OWNDC;
+        wc.lpfnWndProc = (WNDPROC) MainWndProc;
+        wc.cbClsExtra = 0;
+        wc.cbWndExtra = 0;
+        wc.hInstance = hinstance;
+        wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
+        wc.hCursor = LoadCursor( NULL, IDC_ARROW );
+        wc.hbrBackground = NULL;
+        wc.lpszMenuName = NULL;
+        wc.lpszClassName = WINDOW_NAME;
+
+        if ( !RegisterClass( &wc ) )
+        {
+            crError( "Render SPU: Couldn't register window class -- you're not trying "
+                    "to do multi-pipe stuff on windows, are you?\n\nNote --"
+                    "This error message is from 1997 and probably doesn't make"
+                    "any sense any more, but it's nostalgic for Humper." );
+            return GL_FALSE;
+        }
+        crDebug( "Render SPU: Registered the class" );
+    }
+    crDebug( "Render SPU: Got the class information" );
+
+    /* Full screen window should be a popup (undecorated) window */
+#if 1
+    window_style = ( render_spu.fullscreen ? WS_POPUP : WS_CAPTION );
+#else
+    window_style = ( WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN );
+    window_style |= WS_SYSMENU;
+#endif
+
+    crDebug( "Render SPU: Fullscreen: %s", render_spu.fullscreen ? "yes" : "no");
+
+    if ( render_spu.fullscreen )
+    {
+#if 0
+
+        int smCxFixedFrame = GetSystemMetrics( SM_CXFIXEDFRAME );
+        int smCyFixedFrame = GetSystemMetrics( SM_CXFIXEDFRAME ) + 1;
+        int smCyCaption = GetSystemMetrics( SM_CYCAPTION );
+
+        window->BltInfo.width = GetSystemMetrics( SM_CXSCREEN ) ;
+        window->BltInfo.height = GetSystemMetrics( SM_CYSCREEN ) ;
+
+        crDebug( "Render SPU: Window Dims: %d, %d", window->BltInfo.width, window->BltInfo.height );
+
+        window->x = render_spu->defaultX - smCxFixedFrame - 1;
+        window->y = render_spu->defaultY - smCyFixedFrame - smCyCaption;
+
+        window_plus_caption_width = window->BltInfo.width + 2 * smCxFixedFrame;
+        window_plus_caption_height = window->BltInfo.height + 2 * smCyFixedFrame + smCyCaption;
+
+#else
+        /* Since it's undecorated, we don't have to do anything fancy
+         * with these parameters. */
+
+        window->BltInfo.width = GetSystemMetrics( SM_CXSCREEN ) ;
+        window->BltInfo.height = GetSystemMetrics( SM_CYSCREEN ) ;
+        window->x = 0;
+        window->y = 0;
+        window_plus_caption_width = window->BltInfo.width;
+        window_plus_caption_height = window->BltInfo.height;
+
+#endif
+    }
+    else
+    {
+        /* CreateWindow takes the size of the entire window, so we add
+         * in the size necessary for the frame and the caption. */
+
+        int smCxFixedFrame, smCyFixedFrame, smCyCaption;
+        smCxFixedFrame = GetSystemMetrics( SM_CXFIXEDFRAME );
+        crDebug( "Render SPU: Got the X fixed frame" );
+        smCyFixedFrame = GetSystemMetrics( SM_CYFIXEDFRAME );
+        crDebug( "Render SPU: Got the Y fixed frame" );
+        smCyCaption = GetSystemMetrics( SM_CYCAPTION );
+        crDebug( "Render SPU: Got the Caption " );
+
+        window_plus_caption_width = window->BltInfo.width + 2 * smCxFixedFrame;
+        window_plus_caption_height = window->BltInfo.height + 2 * smCyFixedFrame + smCyCaption;
+
+        window->x = render_spu.defaultX - smCxFixedFrame;
+        window->y = render_spu.defaultY - smCyFixedFrame - smCyCaption;
+    }
+
+    crDebug( "Render SPU: Creating the window: (%d,%d), (%d,%d)", render_spu.defaultX, render_spu.defaultY, window_plus_caption_width, window_plus_caption_height );
+    window->hWnd = CreateWindow( WINDOW_NAME, WINDOW_NAME,
+            window_style,
+            window->x, window->y,
+            window_plus_caption_width,
+            window_plus_caption_height,
+            NULL, NULL, hinstance, &render_spu );
+
+    if ( !window->hWnd )
+    {
+        crError( "Render SPU: Create Window failed!  That's almost certainly terrible." );
+        return GL_FALSE;
+    }
+
+    window->visible = showIt;
+
+    if (!showIt)
+    {
+        renderspu_SystemShowWindow( window, 0 );
+        if (window->BltInfo.height <= 0 || window->BltInfo.width <= 0)
+        {
+            renderspu_SystemWindowSize(window,
+                    window->BltInfo.width > 0 ? window->BltInfo.width : 4,
+                    window->BltInfo.height > 0 ? window->BltInfo.height : 4);
+        }
+    }
+    else
+    {
+        crDebug( "Render SPU: Showing the window" );
+        crDebug("renderspu_SystemCreateWindow: showwindow: %x", window->hWnd);
+    }
+
+    CRASSERT(!window->visible == !showIt);
+
+    /* Intel drivers require a window to be visible for proper 3D rendering,
+     * so set it visible and handle the visibility with visible regions (see below) */
+    ShowWindow( window->hWnd, SW_SHOWNORMAL );
+
+    SetForegroundWindow( window->hWnd );
+
+    SetWindowPos( window->hWnd, HWND_TOP, window->x, window->y,
+              window_plus_caption_width, window_plus_caption_height,
+              ( render_spu.fullscreen ? (SWP_SHOWWINDOW |
+                         SWP_NOSENDCHANGING | 
+                         SWP_NOREDRAW | 
+                         SWP_NOACTIVATE ) :
+                         0 ) );
+
+    if ( render_spu.fullscreen )
+        ShowCursor( FALSE );
+
+    window->device_context = GetDC( window->hWnd );
+    if (!window->device_context)
+    {
+        DWORD winEr = GetLastError();
+        crWarning("GetDC failed, winEr %d", winEr);
+    }
+
+    crDebug( "Render SPU: Got the DC: 0x%x", window->device_context );
+
+    if ( !bSetupPixelFormat( window->device_context, visual->visAttribs ) )
+    {
+        crError( "Render SPU: Couldn't set up the device context!  Yikes!" );
+        return GL_FALSE;
+    }
+
+    return GL_TRUE;
+}
+
+GLboolean renderspu_SystemVBoxCreateWindow( VisualInfo *visual, GLboolean showIt, WindowInfo *window )
+{
+#if 0
+    HDESK     desktop;
+#endif
+    HINSTANCE hinstance;
+    WNDCLASS  wc;
+    DWORD     window_style;
+    int       window_plus_caption_width;
+    int       window_plus_caption_height;
+
+    window->hRgn = NULL;
+    window->visual = visual;
+    window->nativeWindow = 0;
+
+    if ( render_spu.use_L2 )
+    {
+        crWarning( "Going fullscreen because we think we're using Lightning-2." );
+        render_spu.fullscreen = 1;
+    }
+
+    /*
+     * Begin Windows / WGL code
+     */
+
+    hinstance = GetModuleHandle( NULL );
+    if (!hinstance)
+    {
+        crError( "Render SPU: Couldn't get a handle to my module." );
+        return GL_FALSE;
+    }
+    crDebug( "Render SPU: Got the module handle: 0x%x", hinstance );
+
+#if 0
+    /* If we were launched from a service, telnet, or rsh, we need to
+     * get the input desktop.  */
+
+    desktop = OpenInputDesktop( 0, FALSE,
+            DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW |
+            DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL |
+            DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS |
+            DESKTOP_SWITCHDESKTOP | GENERIC_WRITE );
+
+    if ( !desktop )
+    {
+        crError( "Render SPU: Couldn't acquire input desktop" );
+        return GL_FALSE;
+    }
+    crDebug( "Render SPU: Got the desktop: 0x%x", desktop );
+
+    if ( !SetThreadDesktop( desktop ) )
+    {
+        /* If this function fails, it's probably because 
+         * it's already been called (i.e., the render SPU 
+         * is bolted to an application?) */
+
+        /*crError( "Couldn't set thread to input desktop" ); */
+    }
+    crDebug( "Render SPU: Set the thread desktop -- this might have failed." );
+#endif
+
+    if ( !GetClassInfo(hinstance, WINDOW_NAME, &wc) ) 
+    {
+        wc.style = CS_OWNDC; // | CS_PARENTDC;
+        wc.lpfnWndProc = (WNDPROC) MainWndProc;
+        wc.cbClsExtra = 0;
+        wc.cbWndExtra = 0;
+        wc.hInstance = hinstance;
+        wc.hIcon = NULL; //LoadIcon( NULL, IDI_APPLICATION );
+        wc.hCursor = NULL; //LoadCursor( NULL, IDC_ARROW );
+        wc.hbrBackground = NULL;
+        wc.lpszMenuName = NULL;
+        wc.lpszClassName = WINDOW_NAME;                       
+
+        if ( !RegisterClass( &wc ) )
+        {
+            crError( "Render SPU: Couldn't register window class -- you're not trying "
+                    "to do multi-pipe stuff on windows, are you?\n\nNote --"
+                    "This error message is from 1997 and probably doesn't make"
+                    "any sense any more, but it's nostalgic for Humper." );
+            return GL_FALSE;
+        }
+        crDebug( "Render SPU: Registered the class" );
+    }
+    crDebug( "Render SPU: Got the class information" );
+
+    /* Full screen window should be a popup (undecorated) window */
+#if 1
+    window_style = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_DISABLED;
+    if (render_spu_parent_window_id)
+    {
+        window_style |= WS_CHILD;
+    }
+#else
+    window_style = ( WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN );
+    window_style |= WS_SYSMENU;
+#endif
+
+    crDebug( "Render SPU: Fullscreen: %s", render_spu.fullscreen ? "yes" : "no");
+
+    if ( render_spu.fullscreen )
+    {
+#if 0
+
+        int smCxFixedFrame = GetSystemMetrics( SM_CXFIXEDFRAME );
+        int smCyFixedFrame = GetSystemMetrics( SM_CXFIXEDFRAME ) + 1;
+        int smCyCaption = GetSystemMetrics( SM_CYCAPTION );
+
+        window->BltInfo.width = GetSystemMetrics( SM_CXSCREEN ) ;
+        window->BltInfo.height = GetSystemMetrics( SM_CYSCREEN ) ;
+
+        crDebug( "Render SPU: Window Dims: %d, %d", window->BltInfo.width, window->BltInfo.height );
+
+        window->x = render_spu->defaultX - smCxFixedFrame - 1;
+        window->y = render_spu->defaultY - smCyFixedFrame - smCyCaption;
+
+        window_plus_caption_width = window->BltInfo.width + 2 * smCxFixedFrame;
+        window_plus_caption_height = window->BltInfo.height + 2 * smCyFixedFrame + smCyCaption;
+
+#else
+        /* Since it's undecorated, we don't have to do anything fancy
+         * with these parameters. */
+
+        window->BltInfo.width = GetSystemMetrics( SM_CXSCREEN ) ;
+        window->BltInfo.height = GetSystemMetrics( SM_CYSCREEN ) ;
+        window->x = 0;
+        window->y = 0;
+        window_plus_caption_width = window->BltInfo.width;
+        window_plus_caption_height = window->BltInfo.height;
+
+#endif
+    }
+    else
+    {
+        /* CreateWindow takes the size of the entire window, so we add
+         * in the size necessary for the frame and the caption. */
+        int smCxFixedFrame, smCyFixedFrame, smCyCaption;
+        smCxFixedFrame = GetSystemMetrics( SM_CXFIXEDFRAME );
+        crDebug( "Render SPU: Got the X fixed frame" );
+        smCyFixedFrame = GetSystemMetrics( SM_CYFIXEDFRAME );
+        crDebug( "Render SPU: Got the Y fixed frame" );
+        smCyCaption = GetSystemMetrics( SM_CYCAPTION );
+        crDebug( "Render SPU: Got the Caption " );
+
+        window_plus_caption_width = window->BltInfo.width + 2 * smCxFixedFrame;
+        window_plus_caption_height = window->BltInfo.height + 2 * smCyFixedFrame + smCyCaption;
+
+        window->x = render_spu.defaultX;
+        window->y = render_spu.defaultY;
+    }
+
+    crDebug( "Render SPU: Creating the window: (%d,%d), (%d,%d)", render_spu.defaultX, render_spu.defaultY, window_plus_caption_width, window_plus_caption_height );
+    /*window->hWnd = CreateWindowEx( WS_EX_NOACTIVATE | WS_EX_NOPARENTNOTIFY,
+            WINDOW_NAME, WINDOW_NAME,
+            window_style,
+            window->x, window->y,
+            window->BltInfo.width,
+            window->BltInfo.height,
+            (void*) render_spu_parent_window_id, NULL, hinstance, &render_spu );*/
+    {
+        CREATESTRUCT cs;
+
+        cs.lpCreateParams = window;
+
+        cs.dwExStyle    = WS_EX_NOACTIVATE | WS_EX_NOPARENTNOTIFY;
+        cs.lpszName     = WINDOW_NAME;
+        cs.lpszClass    = WINDOW_NAME;
+        cs.style        = window_style;
+        cs.x            = window->x;
+        cs.y            = window->y;
+        cs.cx           = window->BltInfo.width;
+        cs.cy           = window->BltInfo.height;
+        cs.hwndParent   = (void*) render_spu_parent_window_id;
+        cs.hMenu        = NULL;
+        cs.hInstance    = hinstance;
+
+        if (render_spu.dwWinThreadId)
+        {
+            DWORD res;
+            int cnt=0;
+
+            if (!PostThreadMessage(render_spu.dwWinThreadId, WM_VBOX_RENDERSPU_CREATE_WINDOW, 0, (LPARAM) &cs))
+            {
+                crError("Render SPU: PostThreadMessage failed with %i", GetLastError());
+                return GL_FALSE;
+            }
+
+            do
+            {
+                res = WaitForSingleObject(render_spu.hWinThreadReadyEvent, 1000);
+                cnt++;
+            }
+            while ((res!=WAIT_OBJECT_0) && (cnt<10));
+
+            crDebug("Render SPU: window thread waited %i secs", cnt);
+
+            if (res!=WAIT_OBJECT_0)
+            {
+                crError("Render SPU: window thread not responded after %i tries", cnt);
+                return GL_FALSE;
+            }
+        }
+        else
+        {
+            crError("Render SPU: window thread is not running");
+            return GL_FALSE;
+        }
+    }
+
+    if ( !window->hWnd )
+    {
+        crError( "Render SPU: Create Window failed!  That's almost certainly terrible." );
+        return GL_FALSE;
+    }
+
+    window->visible = 1;
+
+    if (!showIt)
+    {
+        renderspu_SystemShowWindow( window, 0 );
+        if (window->BltInfo.height <= 0 || window->BltInfo.width <= 0)
+        {
+            renderspu_SystemWindowSize(window,
+                    window->BltInfo.width > 0 ? window->BltInfo.width : 4,
+                    window->BltInfo.height > 0 ? window->BltInfo.height : 4);
+        }
+    }
+    else
+    {
+#ifdef DEBUG_misha
+        crWarning( "Render SPU: Showing the window" );
+#else
+        crDebug( "Render SPU: Showing the window" );
+#endif
+        crDebug("renderspu_SystemCreateWindow: showwindow: %x", window->hWnd);
+    }
+
+    CRASSERT(!window->visible == !showIt);
+
+    /* Intel drivers require a window to be visible for proper 3D rendering,
+     * so set it visible and handle the visibility with visible regions (see below) */
+    if (window->BltInfo.Base.id != CR_RENDER_DEFAULT_WINDOW_ID)
+    {
+        ShowWindow( window->hWnd, SW_SHOWNORMAL );
+    }
+    else
+    {
+        CRASSERT(!showIt);
+        /* dummy window is always hidden in any way */
+    }
+
+    //SetForegroundWindow( visual->hWnd );
+
+    SetWindowPos( window->hWnd, HWND_TOP, window->x, window->y,
+                  window->BltInfo.width, window->BltInfo.height,
+                  ( render_spu.fullscreen ? 
+                    (SWP_SHOWWINDOW | SWP_NOSENDCHANGING | SWP_NOREDRAW | SWP_NOACTIVATE ) : SWP_NOACTIVATE 
+                  ) );
+    crDebug("Render SPU: SetWindowPos (%x, %d, %d, %d, %d)", window->hWnd, 
+            window->x, window->y, window->BltInfo.width, window->BltInfo.height);
+
+    if ( render_spu.fullscreen )
+        ShowCursor( FALSE );
+
+    window->device_context = GetDC( window->hWnd );
+    if (!window->device_context)
+    {
+        DWORD winEr = GetLastError();
+        crWarning("GetDC failed, winEr %d", winEr);
+    }
+
+    crDebug( "Render SPU: Got the DC: 0x%x", window->device_context );
+
+    if ( !bSetupPixelFormat( window->device_context, visual->visAttribs ) )
+    {
+        crError( "Render SPU: Couldn't set up the device context!  Yikes!" );
+        return GL_FALSE;
+    }
+
+    /* set the window pointer data at the last step to ensure our WM_PAINT callback does not do anything until we are fully initialized */
+#ifdef RT_STRICT
+    SetLastError(NO_ERROR);
+#endif
+    {
+        LONG_PTR oldVal = SetWindowLongPtr(window->hWnd, GWLP_USERDATA, (LONG_PTR)window);
+        Assert(!oldVal && GetLastError() == NO_ERROR); RT_NOREF_PV(oldVal);
+    }
+
+    return GL_TRUE;
+}
+
+static void renderspuWindowRgnApply(WindowInfo *window)
+{
+    HRGN hRgn = window->hRgn;
+    if (hRgn)
+    {
+        /* note: according to the docs, SetWindowRgn owns the regions after it is called,
+         * and the regions will be freed automatically when needed,
+         * i.e. the caller should not do that.
+         * this is why we need to make a copy of the regions to be passed in */
+
+        int result;
+        hRgn = CreateRectRgn(0, 0, 0, 0);
+        if (!hRgn)
+        {
+            WARN(("CreateRectRgn failed"));
+            return;
+        }
+
+        result =  CombineRgn(hRgn, window->hRgn, NULL, RGN_COPY);
+        if (result == ERROR)
+        {
+            WARN(("CombineRgn failed"));
+            return;
+        }
+    }
+
+    SetWindowRgn(window->hWnd, hRgn, true);
+}
+
+/* Either show or hide the render SPU's window. */
+void renderspu_SystemShowWindow( WindowInfo *window, GLboolean showIt )
+{
+    if (showIt)
+    {
+        crDebug("SHOW renderspu_SystemShowWindow: %x", window->hWnd);
+        renderspuWindowRgnApply(window);
+    }
+    else
+    {
+        HRGN hRgn;
+        crDebug("HIDE renderspu_SystemShowWindow: %x", window->hWnd);
+        hRgn = CreateRectRgn(0, 0, 0, 0);
+        SetWindowRgn(window->hWnd, hRgn, true);
+        /* note: according to the docs, SetWindowRgn owns the regions after it is called,
+         * and the regions will be freed automatically when needed,
+         * i.e. the caller should not do that */
+    }
+    window->visible = showIt;
+}
+
+void renderspu_SystemVBoxPresentComposition( WindowInfo *window, const struct VBOXVR_SCR_COMPOSITOR_ENTRY *pChangedEntry )
+{
+    /* The !render_spu.force_present_main_thread code flow is actually inspired
+     * by cocoa backend impl, here it forces rendering in WndProc, i.e. main
+     * thread. It defaults to 0, because it is for debugging and working around
+     * bugs. In principle would need root cause investigation. */
+    if (!render_spu.force_present_main_thread)
+    {
+        const struct VBOXVR_SCR_COMPOSITOR *pCompositor;
+        /* we do not want to be blocked with the GUI thread here, so only draw here if we are really able to do that w/o blocking */
+        int rc = renderspuVBoxCompositorTryAcquire(window, &pCompositor);
+        if (RT_SUCCESS(rc))
+        {
+            renderspuVBoxPresentCompositionGeneric(window, pCompositor, pChangedEntry, 0, false);
+            renderspuVBoxCompositorRelease(window);
+        }
+        else if (rc != VERR_SEM_BUSY)
+        {
+            /* this is somewhat we do not expect */
+            crWarning("renderspuVBoxCompositorTryAcquire failed rc %d", rc);
+        }
+    }
+
+    {
+        render_spu.self.Flush();
+        renderspuVBoxPresentBlitterEnsureCreated(window, 0);
+        RedrawWindow(window->hWnd, NULL, NULL, RDW_INTERNALPAINT);
+    }
+}
+
+GLboolean renderspu_SystemCreateContext( VisualInfo *visual, ContextInfo *context, ContextInfo *sharedContext )
+{
+    (void) sharedContext;
+    context->visual = visual;
+
+    /* Found a visual, so we're o.k. to create the context now */
+    if (0/*visual->device_context*/) {
+
+        //crDebug( "Render SPU: Using the DC: 0x%x", visual->device_context );
+
+        //context->hRC = render_spu.ws.wglCreateContext( visual->device_context );
+        if (!context->hRC)
+        {
+            crError( "Render SPU: wglCreateContext failed (error 0x%x)", GetLastError() );
+            return GL_FALSE;
+        }
+    } else {
+        crDebug( "Render SPU: Delaying DC creation " );
+        context->hRC = NULL;    /* create it later in makecurrent */
+    }
+
+
+    return GL_TRUE;
+}
+
+void renderspu_SystemDestroyContext( ContextInfo *context )
+{
+    render_spu.ws.wglDeleteContext( context->hRC );
+    context->hRC = NULL;
+}
+
+static GLboolean renderspuChkActivateSharedContext(ContextInfo *sharedContext)
+{
+    WindowInfo *window;
+
+    if (sharedContext->hRC)
+        return GL_TRUE;
+
+    CRASSERT(sharedContext->BltInfo.Base.id);
+
+    if (sharedContext->shared)
+        renderspuChkActivateSharedContext(sharedContext->shared);
+
+    window = renderspuGetDummyWindow(sharedContext->visual->visAttribs);
+    if (!window)
+    {
+        crError("renderspuChkActivateSharedContext: renderspuGetDummyWindow failed!");
+        return GL_FALSE;
+    }
+
+    CRASSERT(window->device_context);
+
+    crDebug( "Render SPU: renderspuChkActivateSharedContext: made the DC: 0x%x", window->device_context );
+
+    sharedContext->hRC = render_spu.ws.wglCreateContext(window->device_context);
+    if (!sharedContext->hRC)
+    {
+        crError( "Render SPU: (renderspuChkActivateSharedContext) Couldn't create the context for the window (error 0x%x)", GetLastError() );
+        return GL_FALSE;
+    }
+
+    return GL_TRUE;
+}
+
+void renderspu_SystemMakeCurrent( WindowInfo *window, GLint nativeWindow, ContextInfo *context )
+{
+    CRASSERT(render_spu.ws.wglMakeCurrent);
+
+    if (context && window) {
+        if (window->visual != context->visual) {
+            /*
+             * XXX have to revisit this issue!!!
+             *
+             * But for now we destroy the current window
+             * and re-create it with the context's visual abilities
+             */
+
+            /** @todo Chromium has no correct code to remove window ids and associated info from 
+             * various tables. This is hack which just hides the root case.
+             */
+            crWarning("Recreating window in renderspu_SystemMakeCurrent\n");
+            renderspu_SystemDestroyWindow( window );
+            renderspu_SystemVBoxCreateWindow( context->visual, window->visible, window );
+        }
+
+#if 0
+        if (0/*render_spu.render_to_app_window && nativeWindow*/)
+        {
+            /* The render_to_app_window option 
+             * is set and we've got a nativeWindow
+             * handle, save the handle for 
+             * later calls to swapbuffers().
+             *
+             * NOTE: This doesn't work, except 
+             * for software driven Mesa.
+             * We'd need to object link the 
+             * crappfaker and crserver to be able to share
+             * the HDC values between processes.. FIXME!
+             */
+            if (context->shared)
+            {
+                /* first make sure we have shared context created */
+                renderspuChkActivateSharedContext(context->shared);
+            }
+
+            window->nativeWindow = (HDC) nativeWindow;
+            if (context->hRC == 0) {
+                context->hRC = render_spu.ws.wglCreateContext( window->nativeWindow );
+                if (!context->hRC)
+                {
+                    crError( "(MakeCurrent) Couldn't create the context for the window (error 0x%x)", GetLastError() );
+                }
+            }
+
+            if (context->shared
+                    && context->shared->hRC
+                    && context->hRC)
+            {
+                /* share lists */
+                render_spu.ws.wglShareLists(context->shared->hRC, context->hRC);
+            }
+
+            render_spu.ws.wglMakeCurrent( window->nativeWindow, context->hRC );
+        }
+        else
+#endif
+        {
+            if (!context->hRC) {
+                CRASSERT(!nativeWindow);
+                if (context->shared)
+                {
+                    /* first make sure we have shared context created */
+                    renderspuChkActivateSharedContext(context->shared);
+                }
+
+                context->hRC = render_spu.ws.wglCreateContext(window->device_context);
+                if (!context->hRC)
+                {
+                    crError( "Render SPU: (MakeCurrent) Couldn't create the context for the window (error 0x%x)", GetLastError() );
+                }
+
+                if (context->shared
+                        && context->shared->hRC
+                        && context->hRC)
+                {
+                    /* share lists */
+                    BOOL bRc = render_spu.ws.wglShareLists(context->shared->hRC, context->hRC);
+                    if (!bRc)
+                    {
+                        DWORD winEr = GetLastError();
+                        crWarning("wglShareLists failed, winEr %d", winEr);
+                    }
+                }
+
+                /*Requery ext function pointers, we skip dummy ctx as it should never be used with ext functions*/
+                if (0 && context->BltInfo.Base.id)
+                {
+                    int numFuncs, i;
+                    SPUNamedFunctionTable ext_table[1000];
+
+
+                    crDebug("Default server ctx created, requerying ext functions");
+                    /*requery ext functions*/
+                    numFuncs = renderspuCreateFunctions(ext_table);
+                    numFuncs += crLoadOpenGLExtensions( &render_spu.ws, ext_table+numFuncs);
+                    CRASSERT(numFuncs < 1000);
+
+                    /*change spu dispatch*/
+                    crSPUChangeDispatch(&render_spu.self, ext_table);
+
+
+                    /*cleanup temp table*/
+                    for (i=0; i<numFuncs; ++i)
+                    {
+                        if (ext_table[i].name) crFree(ext_table[i].name);
+                    }
+                }
+            }
+
+            /*crDebug("MakeCurrent 0x%x, 0x%x", window->device_context, context->hRC);*/
+            if (!render_spu.ws.wglMakeCurrent(!nativeWindow ? window->device_context : window->redraw_device_context, context->hRC))
+            {
+                DWORD err = GetLastError();
+                crError("Render SPU: (MakeCurrent) failed to make 0x%x, 0x%x current with 0x%x error.", window->device_context, context->hRC, err);
+            }
+        }
+
+        renderspuAtiQuirk_ChkApply();
+    }
+    else {
+        render_spu.ws.wglMakeCurrent( 0, 0 );
+    }
+}
+
+void renderspu_SystemWindowSize( WindowInfo *window, GLint w, GLint h )
+{
+    int winprop;
+    CRASSERT(window);
+    CRASSERT(window->visual);
+    if ( render_spu.fullscreen )
+        winprop = SWP_SHOWWINDOW | SWP_NOSENDCHANGING |
+              SWP_NOREDRAW | SWP_NOACTIVATE;
+    else 
+        winprop = SWP_NOACTIVATE | SWP_DEFERERASE | SWP_NOSENDCHANGING | SWP_NOZORDER; //SWP_SHOWWINDOW;
+
+    /*SetWindowRgn(window->hWnd, NULL, false);*/
+
+    if (!SetWindowPos( window->hWnd, HWND_TOP,
+            window->x, window->y, w, h, winprop )) {
+        crWarning("!!!FAILED!!! Render SPU: SetWindowPos (%x, %d, %d, %d, %d)", window->hWnd, window->x, window->y, w, h);
+    } else {
+        crDebug("Render SPU: SetWindowSize (%x, %d, %d, %d, %d)", window->hWnd, window->x, window->y, w, h);
+    }
+    /* save the new size */
+    window->BltInfo.width = w;
+    window->BltInfo.height = h;
+}
+
+
+void renderspu_SystemGetWindowGeometry( WindowInfo *window, GLint *x, GLint *y, GLint *w, GLint *h )
+{
+    RECT rect;
+
+    CRASSERT(window);
+    CRASSERT(window->visual);
+
+    GetClientRect( window->hWnd, &rect );
+    *x = rect.left;
+    *y = rect.top;
+    *w = rect.right - rect.left;
+    *h = rect.bottom - rect.top;
+}
+
+
+void renderspu_SystemGetMaxWindowSize( WindowInfo *window, GLint *w, GLint *h )
+{
+    /* XXX fix this */
+    (void) window;
+    *w = 1600;
+    *h = 1200;
+}
+
+
+void renderspu_SystemWindowPosition( WindowInfo *window, GLint x, GLint y )
+{
+    int winprop;
+    CRASSERT(window);
+    CRASSERT(window->visual);
+    if ( render_spu.fullscreen )
+        winprop = SWP_SHOWWINDOW | SWP_NOSENDCHANGING |
+              SWP_NOREDRAW | SWP_NOACTIVATE;
+    else 
+        winprop = SWP_NOACTIVATE | SWP_DEFERERASE | SWP_NOSENDCHANGING | SWP_NOZORDER; //SWP_SHOWWINDOW;
+
+    /*SetWindowRgn(window->visual->hWnd, NULL, false);*/
+
+    if (!SetWindowPos( window->hWnd, HWND_TOP, 
+            x, y, window->BltInfo.width, window->BltInfo.height, winprop )) {
+        crWarning("!!!FAILED!!! Render SPU: SetWindowPos (%x, %d, %d, %d, %d)", window->hWnd, x, y, window->BltInfo.width, window->BltInfo.height);
+    } else {
+        crDebug("Render SPU: SetWindowPos (%x, %d, %d, %d, %d)", window->hWnd,
+                x, y, window->BltInfo.width, window->BltInfo.height);
+    }
+    /* save the new position */
+    window->x = x;
+    window->y = y;
+}
+
+GLboolean renderspu_SystemWindowNeedEmptyPresent(WindowInfo *window)
+{
+    RT_NOREF(window);
+    return GL_FALSE;
+}
+
+void renderspu_SystemWindowVisibleRegion(WindowInfo *window, GLint cRects, const GLint* pRects)
+{
+    GLint i;
+    HRGN hRgn, hTmpRgn;
+	RECT rectRgnBound;
+
+    CRASSERT(window);
+    CRASSERT(window->visual);
+
+    if (window->hRgn)
+    {
+        DeleteObject(window->hRgn);
+        window->hRgn = NULL;
+    }
+
+    hRgn = CreateRectRgn(0, 0, 0, 0);
+
+    for (i = 0; i < cRects; i++)
+    {
+        crDebug("Render SPU: CreateRectRgn #%d: (%d, %d)-(%d, %d)", i, 
+            pRects[4 * i], pRects[4 * i + 1], pRects[4 * i + 2], pRects[4 * i + 3]);
+
+        hTmpRgn = CreateRectRgn(pRects[4 * i], pRects[4 * i + 1], pRects[4 * i + 2], pRects[4 * i + 3]);
+        CombineRgn(hRgn, hRgn, hTmpRgn, RGN_OR);
+        DeleteObject(hTmpRgn);
+    }
+
+    if (GetRgnBox(hRgn, &rectRgnBound))
+    {
+        crDebug("Render SPU: Rgn bounding box (%d, %d)-(%d, %d)", 
+            rectRgnBound.left, rectRgnBound.top, rectRgnBound.right, rectRgnBound.bottom);
+    }
+
+    window->hRgn = hRgn;
+
+    if (window->visible)
+        renderspuWindowRgnApply(window);
+
+    crDebug("Render SPU: SetWindowRgn (%x, cRects=%i)", window->hWnd, cRects);
+}
+
+static void renderspuHandleWindowMessages( HWND hWnd )
+{
+    MSG msg;
+    while ( PeekMessage( &msg, hWnd, 0, 0xffffffff, PM_REMOVE ) )
+    {
+        TranslateMessage( &msg );    
+        DispatchMessage( &msg );
+    }
+    
+    //BringWindowToTop( hWnd );
+}
+
+void renderspu_SystemSwapBuffers( WindowInfo *w, GLint flags )
+{
+    int return_value;
+
+    RT_NOREF(flags);
+
+    /* peek at the windows message queue */
+//    renderspuHandleWindowMessages( w->hWnd );
+
+    /* render_to_app_window:
+     * w->nativeWindow will only be non-zero if the
+     * render_spu.render_to_app_window option is true and
+     * MakeCurrent() recorded the nativeWindow handle in the WindowInfo
+     * structure.
+     */
+    if (render_spu.render_to_app_window && w->nativeWindow) {
+#ifdef VBOX_CR_SERVER_FORCE_WGL
+        return_value = render_spu.ws.wglSwapBuffers( w->nativeWindow );
+#else
+        return_value = SwapBuffers( w->nativeWindow );
+#endif
+    } else {
+        /*
+        HRGN hRgn1, hRgn2, hRgn3;
+        HWND hWndParent;
+        LONG ws;
+
+        hRgn1 = CreateRectRgn(0, 0, w->BltInfo.width, w->BltInfo.height);
+        hRgn2 = CreateRectRgn(50, 50, 100, 100);
+        hRgn3 = CreateRectRgn(0, 0, 0, 0);
+        CombineRgn(hRgn3, hRgn1, hRgn2, RGN_DIFF);
+        SetWindowRgn(w->visual->hWnd, hRgn3, true);
+        DeleteObject(hRgn1);
+        DeleteObject(hRgn2);
+
+        hWndParent = GetParent(w->visual->hWnd);
+        ws = GetWindowLong(hWndParent, GWL_STYLE);
+        ws &= ~WS_CLIPCHILDREN;
+        SetWindowLong(hWndParent, GWL_STYLE, ws);
+
+        RECT rcClip;        
+
+        rcClip.left = 50;
+        rcClip.top  = 50;
+        rcClip.right = 100;
+        rcClip.bottom = 100;
+        ValidateRect(w->visual->hWnd, &rcClip);
+
+        return_value = GetClipBox(w->visual->device_context, &rcClip);
+        crDebug("GetClipBox returned %d (NR=%d,SR=%d,CR=%d,ERR=%d)", 
+                return_value, NULLREGION, SIMPLEREGION, COMPLEXREGION, ERROR);
+
+        crDebug("rcClip(%d, %d, %d, %d)", rcClip.left, rcClip.top, rcClip.right, rcClip.bottom);
+
+        return_value = ExcludeClipRect(w->visual->device_context, 50, 50, 100, 100);
+        crDebug("ExcludeClipRect returned %d (NR=%d,SR=%d,CR=%d,ERR=%d)", 
+                return_value, NULLREGION, SIMPLEREGION, COMPLEXREGION, ERROR);
+
+        return_value = GetClipBox(w->visual->device_context, &rcClip);
+        crDebug("GetClipBox returned %d (NR=%d,SR=%d,CR=%d,ERR=%d)", 
+                return_value, NULLREGION, SIMPLEREGION, COMPLEXREGION, ERROR);
+        crDebug("rcClip(%d, %d, %d, %d)", rcClip.left, rcClip.top, rcClip.right, rcClip.bottom);
+        */
+#ifdef VBOX_CR_SERVER_FORCE_WGL
+        return_value = render_spu.ws.wglSwapBuffers( w->device_context );
+#else
+        return_value = SwapBuffers( w->device_context );
+#endif
+    }
+    if (!return_value)
+    {
+        /* GOD DAMN IT.  The latest versions of the NVIDIA drivers
+        * return failure from wglSwapBuffers, but it works just fine.
+        * WHAT THE HELL?! */
+
+        crWarning( "wglSwapBuffers failed: return value of %d!", return_value);
+    }
+}
+
+void renderspu_SystemReparentWindow(WindowInfo *window)
+{
+    SetParent(window->hWnd, (HWND)render_spu_parent_window_id);
+}
+
+int renderspu_SystemInit(void)
+{
+    return VINF_SUCCESS;
+}
+
+int renderspu_SystemTerm(void)
+{
+    return VINF_SUCCESS;
+}
+
+void renderspu_SystemDefaultSharedContextChanged(ContextInfo *fromContext, ContextInfo *toContext)
+{
+    RT_NOREF(fromContext, toContext);
+}
+
+uint32_t renderspu_SystemPostprocessFunctions(SPUNamedFunctionTable *aFunctions, uint32_t cFunctions, uint32_t cTable)
+{
+    RT_NOREF(aFunctions, cTable);
+    return cFunctions;
+}
Index: /trunk/src/VBox/Main/UnattendedTemplates/ol_ks.cfg
===================================================================
--- /trunk/src/VBox/Main/UnattendedTemplates/ol_ks.cfg	(revision 86647)
+++ /trunk/src/VBox/Main/UnattendedTemplates/ol_ks.cfg	(revision 86648)
@@ -82,7 +82,7 @@
 glibc-headers
 gcc
-@@VBOX_GUEST_OS_COND_VERSION@@**8.0.0**
+@@VBOX_COND_GUEST_VERSION[>8.0.0]@@
 elfutils-libelf-devel
-@@VBOX_GUEST_OS_COND_END@@
+@@VBOX_COND_END@@
 dkms
 make
Index: /trunk/src/VBox/Main/UnattendedTemplates/ol_postinstall.sh
===================================================================
--- /trunk/src/VBox/Main/UnattendedTemplates/ol_postinstall.sh	(revision 86647)
+++ /trunk/src/VBox/Main/UnattendedTemplates/ol_postinstall.sh	(revision 86648)
@@ -202,7 +202,7 @@
 log_command_in_target yum -y install binutils
 log_command_in_target yum -y install make
-@@VBOX_GUEST_OS_COND_VERSION@@**8.0.0**
+@@VBOX_COND_GUEST_VERSION[>8.0.0]@@
 log_command_in_target yum -y install elfutils-libelf-devel
-@@VBOX_GUEST_OS_COND_END@@
+@@VBOX_COND_END@@
 log_command_in_target yum -y install dkms
 log_command_in_target yum -y install make
Index: /trunk/src/VBox/Main/UnattendedTemplates/redhat67_ks.cfg
===================================================================
--- /trunk/src/VBox/Main/UnattendedTemplates/redhat67_ks.cfg	(revision 86647)
+++ /trunk/src/VBox/Main/UnattendedTemplates/redhat67_ks.cfg	(revision 86648)
@@ -82,7 +82,7 @@
 glibc-headers
 gcc
-@@VBOX_GUEST_OS_COND_VERSION@@**8.0.0**
+@@VBOX_COND_GUEST_VERSION[>8.0.0]@@
 elfutils-libelf-devel
-@@VBOX_GUEST_OS_COND_END@@
+@@VBOX_COND_END@@
 dkms
 make
Index: /trunk/src/VBox/Main/UnattendedTemplates/redhat_postinstall.sh
===================================================================
--- /trunk/src/VBox/Main/UnattendedTemplates/redhat_postinstall.sh	(revision 86647)
+++ /trunk/src/VBox/Main/UnattendedTemplates/redhat_postinstall.sh	(revision 86648)
@@ -178,7 +178,7 @@
 log_command_in_target yum -y install binutils
 log_command_in_target yum -y install make
-@@VBOX_GUEST_OS_COND_VERSION@@**8.0.0**
+@@VBOX_COND_GUEST_VERSION[>8.0.0]@@
 log_command_in_target yum -y install elfutils-libelf-devel
-@@VBOX_GUEST_OS_COND_END@@
+@@VBOX_COND_END@@
 log_command_in_target yum -y install dkms
 log_command_in_target yum -y install make
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 86647)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 86648)
@@ -4178,5 +4178,5 @@
   <enum
     name="VirtualSystemDescriptionType"
-    uuid="6e18c6d7-e1b7-4cb0-9706-1f31d18248f8"
+    uuid="70c5ca7b-65a8-49cc-9b19-e80192b9db1d"
     >
     <desc>Used with <link to="IVirtualSystemDescription" /> to describe the type of
@@ -4246,4 +4246,7 @@
     <const name="CloudPublicSSHKey" value="48" />
     <const name="BootingFirmware" value="49" />
+    <const name="CloudInstanceMetadata" value="50" />
+    <const name="CloudInstanceFreeFormTags" value="51" />
+    <const name="CloudImageFreeFormTags" value="52" />
     <const name="HardDiskControllerVirtioSCSI" value="60" />
   </enum>
Index: /trunk/src/VBox/Main/include/ApplianceImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/ApplianceImpl.h	(revision 86647)
+++ /trunk/src/VBox/Main/include/ApplianceImpl.h	(revision 86648)
@@ -145,4 +145,6 @@
     static void i_exportOPCThreadTask(TaskOPC *pTask);
     static void i_importOrExportCloudThreadTask(TaskCloud *pTask);
+
+    HRESULT i_findFirstBootableImage(ComPtr<IMedium>& bootMedium, const ComPtr<IMachine> &pMachine);
 
     HRESULT i_initBackendNames();
Index: /trunk/src/VBox/Main/include/ProgressImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/ProgressImpl.h	(revision 86647)
+++ /trunk/src/VBox/Main/include/ProgressImpl.h	(revision 86648)
@@ -157,4 +157,5 @@
     static DECLCALLBACK(int) i_vdProgressCallback(void *pvUser, unsigned uPercentage);
 
+    HRESULT i_addOperations(ULONG cOperations, ULONG ulTotalOperationsWeight);
 protected:
     DECLARE_EMPTY_CTOR_DTOR(Progress)
Index: /trunk/src/VBox/Main/include/UnattendedInstaller.h
===================================================================
--- /trunk/src/VBox/Main/include/UnattendedInstaller.h	(revision 86647)
+++ /trunk/src/VBox/Main/include/UnattendedInstaller.h	(revision 86648)
@@ -520,4 +520,5 @@
 /**
  * RHEL 7 installer (same as RHEL 6).
+ * The class was added for better handling any possible subtle difference between RHEL6 and RHEL7.
  */
 class UnattendedRhel7Installer : public UnattendedRhel6Installer
@@ -540,4 +541,5 @@
 /**
  * RHEL 8 installer (same as RHEL 7).
+ * The class was added for better handling any possible subtle difference between RHEL7 and RHEL8.
  */
 class UnattendedRhel8Installer : public UnattendedRhel7Installer
@@ -605,5 +607,7 @@
 
 /**
- * Oracle Linux 6 installer.
+ * Oracle Linux 6 installer. 
+ * (same as RHEL 6, except for the templates). 
+ * The reason of adding new class is to sepatate the RHEL from OL.
  */
 class UnattendedOracleLinux6Installer : public UnattendedRhel6Installer
@@ -621,5 +625,6 @@
 
 /**
- * Oracle Linux 7 installer.
+ * Oracle Linux 7 installer. Same as OL 6.
+ * The class was added for better handling any possible subtle difference between OL6 and OL7.
  */
 class UnattendedOracleLinux7Installer : public UnattendedOracleLinux6Installer
@@ -641,5 +646,6 @@
 
 /**
- * Oracle Linux 8 installer.
+ * Oracle Linux 8 installer. Same as OL 7.
+ * The class was added for better handling any possible subtle difference between OL7 and OL8.
  */
 class UnattendedOracleLinux8Installer : public UnattendedOracleLinux7Installer
Index: /trunk/src/VBox/Main/include/UnattendedScript.h
===================================================================
--- /trunk/src/VBox/Main/include/UnattendedScript.h	(revision 86647)
+++ /trunk/src/VBox/Main/include/UnattendedScript.h	(revision 86648)
@@ -96,23 +96,4 @@
     virtual HRESULT getConditional(const char *pachPlaceholder, size_t cchPlaceholder, bool *pfOutputting);
 
-
-    /**
-     * Get the result of a conditional for special version of guest OS.
-     *
-     * @returns COM status code.
-     * @param   pachPlaceholder     The placholder string.  Not zero terminated.
-     * @param   cchPlaceholder      The length of the placeholder.
-     * @param   cchContent          The length of placeholder content.
-     * @param   pcchCorrect         The length of part which must be excluded from the final content of
-     *                              the placeholder.
-     * @param   pfOutputting        Where to return the result of the conditional.
-     *                              This holds the current outputting state on input
-     *                              in case someone want to sanity check anything.
-     */
-    virtual HRESULT getGuestOSConditional(const char *pachPlaceholder,
-                                          size_t cchPlaceholder,
-                                          size_t cchContent,
-                                          size_t *pcchCorrect,
-                                          bool *pfOutputting);
 };
 
Index: /trunk/src/VBox/Main/src-all/ProgressImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-all/ProgressImpl.cpp	(revision 86647)
+++ /trunk/src/VBox/Main/src-all/ProgressImpl.cpp	(revision 86648)
@@ -321,4 +321,11 @@
 
 // public methods only for internal purposes
+ 
+HRESULT Progress::i_addOperations(ULONG cOperations, ULONG ulTotalOperationsWeight)
+{
+    m_cOperations += cOperations;
+    m_ulTotalOperationsWeight += ulTotalOperationsWeight;
+    return S_OK;
+}
 ////////////////////////////////////////////////////////////////////////////////
 
@@ -1059,5 +1066,5 @@
     m_ulOperationPercent = 0;
 
-    LogThisFunc(("%s: aNextOperationsWeight = %d; m_ulCurrentOperation is now %d, m_ulOperationsCompletedWeight is now %d\n",
+    LogRel(("%s: aNextOperationsWeight = %d; m_ulCurrentOperation is now %d, m_ulOperationsCompletedWeight is now %d\n",
                  m_operationDescription.c_str(), aNextOperationsWeight, m_ulCurrentOperation, m_ulOperationsCompletedWeight));
 
Index: /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp	(revision 86647)
+++ /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp	(revision 86648)
@@ -26,4 +26,5 @@
 #include <VBox/com/array.h>
 #include <map>
+#include <stack>
 
 #include "ApplianceImpl.h"
@@ -1409,4 +1410,111 @@
 }
 
+HRESULT Appliance::i_findFirstBootableImage(ComPtr<IMedium>& bootMedium, const ComPtr<IMachine> &pMachine)
+{
+    HRESULT hrc = S_OK;
+    LogFlowFuncEnter();
+
+    const ComPtr<IMachine> &baseMachine = pMachine;
+    try
+    {
+        /* Fetch all available storage controllers */
+        com::SafeIfaceArray<IStorageController> aStorageControllers;
+//      AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+        hrc = baseMachine->COMGETTER(StorageControllers)(ComSafeArrayAsOutParam(aStorageControllers));
+//      alock.release();
+        bool fBootMediumFound = false;
+        ComPtr<IMedium> ptrBootMedium;
+        std::stack <StorageBus_T> aBuses;
+        //insert buses in priority StorageBus_IDE - highest, StorageBus_SAS - lowest
+        aBuses.push(StorageBus_SAS);
+        aBuses.push(StorageBus_SCSI);
+        aBuses.push(StorageBus_SATA);
+        aBuses.push(StorageBus_IDE);
+
+        while (!aBuses.empty())
+        {
+            Bstr    bstrControllerName;
+            Utf8Str strControllerName;
+            ComPtr<IStorageController> sc;
+            StorageBus_T eTargetStorageBusType = aBuses.top();
+            StorageBus_T eSourceStorageBusType;
+            bool f = false;
+
+            for (size_t i=0; i<aStorageControllers.size(); ++i)
+            {
+                sc = aStorageControllers[i];
+                sc->COMGETTER(Name)(bstrControllerName.asOutParam());
+                sc->COMGETTER(Bus)(&eSourceStorageBusType);
+                if (eSourceStorageBusType == eTargetStorageBusType)
+                {
+                    f = true;
+                    break;
+                }
+            }
+
+            if (!f)
+            {
+                aBuses.pop();
+                continue;
+            }
+
+            com::SafeIfaceArray<IMediumAttachment> aMediumAttachments;
+            hrc = baseMachine->GetMediumAttachmentsOfController(bstrControllerName.raw(),
+                                                                ComSafeArrayAsOutParam(aMediumAttachments));
+
+            strControllerName = bstrControllerName;
+            AssertLogRelReturn(strControllerName.isNotEmpty(), setErrorBoth(E_UNEXPECTED, VERR_INTERNAL_ERROR_2));
+
+            for (size_t j = 0; j < aMediumAttachments.size(); j++)
+            {
+                //some checks just in case
+                LONG iPort = -1;
+                hrc = aMediumAttachments[j]->COMGETTER(Port)(&iPort);
+                AssertComRCReturn(hrc, hrc);
+
+                LONG iDevice = -1;
+                hrc = aMediumAttachments[j]->COMGETTER(Device)(&iDevice);
+                AssertComRCReturn(hrc, hrc);
+
+                DeviceType_T enmType;
+                hrc = aMediumAttachments[j]->COMGETTER(Type)(&enmType);
+                AssertComRCReturn(hrc, hrc);
+
+                if (enmType == DeviceType_HardDisk)
+                {
+                    ComPtr<IMedium> ptrMedium;
+                    hrc = aMediumAttachments[j]->COMGETTER(Medium)(ptrMedium.asOutParam());
+                    AssertComRCReturn(hrc, hrc);
+
+                    if (ptrMedium.isNotNull())
+                    {
+                        ptrBootMedium = ptrMedium;
+                        fBootMediumFound = true;
+                        break;
+                    }
+                }
+            }
+
+            if (fBootMediumFound)
+            {
+                hrc = S_OK;
+                break;
+            }
+            else
+                aBuses.pop();
+        }
+
+        if (ptrBootMedium != NULL && !ptrBootMedium.isNull())
+            ptrBootMedium.queryInterfaceTo(bootMedium.asOutParam());
+    }
+    catch (HRESULT erc)
+    {
+        hrc = setError(erc, tr("Exception during finding a bootable disk "));
+    }
+
+    LogFlowFuncLeave();
+    return hrc;
+}
+
 void i_parseURI(Utf8Str strUri, LocationInfo &locInfo)
 {
Index: /trunk/src/VBox/Main/src-server/ApplianceImplExport.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/ApplianceImplExport.cpp	(revision 86647)
+++ /trunk/src/VBox/Main/src-server/ApplianceImplExport.cpp	(revision 86648)
@@ -712,5 +712,7 @@
         try
         {
+            alock.release();
             rc = i_writeCloudImpl(m->locInfo, progress);
+            alock.acquire();
         }
         catch (HRESULT aRC)
@@ -883,4 +885,6 @@
 HRESULT Appliance::i_writeCloudImpl(const LocationInfo &aLocInfo, ComObjPtr<Progress> &aProgress)
 {
+    HRESULT hrc = S_OK;
+
     for (list<ComObjPtr<VirtualSystemDescription> >::const_iterator
          it = m->virtualSystemDescriptions.begin();
@@ -897,15 +901,42 @@
         }
 
-        //remove all disks from the VirtualSystemDescription exept one
+        //Detect bootable disk and remove others from the VirtualSystemDescription
+        ComPtr<IMedium> pBootableMedium;
+        hrc = i_findFirstBootableImage(pBootableMedium, vsdescThis->m->pMachine);
+
+        if (FAILED(hrc)) 
+            throw hrc;
+        if (pBootableMedium.isNull())
+            throw hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("Could not find any bootable disk"));
+
+        ComPtr<IMedium> pBootableBaseMedium;
+        // returns pBootableMedium if there are no diff images
+        hrc = pBootableMedium->COMGETTER(Base)(pBootableBaseMedium.asOutParam());
+        if (FAILED(hrc)) 
+            throw hrc;
+
+        //Get base bootable disk location
+        Bstr bstrBootLocation;
+        hrc = pBootableBaseMedium->COMGETTER(Location)(bstrBootLocation.asOutParam());
+        if (FAILED(hrc)) throw hrc;
+        Utf8Str strBootLocation = bstrBootLocation;
+
         skipped = vsdescThis->i_findByType(VirtualSystemDescriptionType_HardDiskImage);
         itSkipped = skipped.begin();
-
-        Utf8Str strBootLocation;
         while (itSkipped != skipped.end())
         {
-            if (strBootLocation.isEmpty())
-                strBootLocation = (*itSkipped)->strVBoxCurrent;
+            Utf8Str path = (*itSkipped)->strVBoxCurrent;
+            // Locate the Medium object for this entry (by location/path).
+            Log(("Finding disk \"%s\"\n", path.c_str()));
+            ComObjPtr<Medium> ptrSourceDisk;
+            hrc = mVirtualBox->i_findHardDiskByLocation(path, true , &ptrSourceDisk);
+            if (FAILED(hrc)) 
+                throw hrc;
+
+            if (!path.equalsIgnoreCase(strBootLocation))
+                (*itSkipped)->skipIt = true;
             else
-                (*itSkipped)->skipIt = true;
+                LogRel(("Possible bootable disk \"%s\"\n", path.c_str()));
+
             ++itSkipped;
         }
@@ -932,5 +963,5 @@
 
     // Create a progress object here otherwise Task won't be created successfully
-    HRESULT hrc = aProgress.createObject();
+    hrc = aProgress.createObject();
     if (SUCCEEDED(hrc))
     {
Index: /trunk/src/VBox/Main/src-server/UnattendedScript.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/UnattendedScript.cpp	(revision 86647)
+++ /trunk/src/VBox/Main/src-server/UnattendedScript.cpp	(revision 86648)
@@ -59,6 +59,4 @@
     static const char s_szPrefixCond[]     = "@@VBOX_COND_";
     static const char s_szPrefixCondEnd[]  = "@@VBOX_COND_END@@";
-    static const char s_szPrefixCondGuestOs[]     = "@@VBOX_GUEST_OS_COND_";
-    static const char s_szPrefixCondGuestOsEnd[]  = "@@VBOX_GUEST_OS_COND_END@@";
 
     struct
@@ -71,5 +69,4 @@
     size_t      offTemplate = 0;
     size_t      cchTemplate = mStrScriptFullContent.length();
-    size_t      cchInternalCorrect = 0;//used in logic handling the placeholder @@VBOX_GUEST_OS_COND_XXX@@
     rStrDst.setNull();
     for (;;)
@@ -86,5 +83,5 @@
                 try
                 {
-                    rStrDst.append(mStrScriptFullContent, offTemplate + cchInternalCorrect, cchToCopy - + cchInternalCorrect);
+                    rStrDst.append(mStrScriptFullContent, offTemplate, cchToCopy);
                 }
                 catch (std::bad_alloc &)
@@ -95,5 +92,4 @@
             }
             offTemplate += cchToCopy;
-            cchInternalCorrect = 0;//don't forget to reset
         }
 
@@ -111,5 +107,5 @@
             while (   offPlaceholder + cchPlaceholder < cchTemplate
                    && (ch = pszPlaceholder[cchPlaceholder]) != '\0'
-                   && (   ch == '_'
+                   && (   ch == '_' || ch == '[' || ch == ']' || ch == '.' || ch == '>' || ch == '<'
                        || RT_C_IS_UPPER(ch)
                        || RT_C_IS_DIGIT(ch)) )
@@ -128,6 +124,5 @@
                 || pszPlaceholder[cchPlaceholder - 2] != '@'
                 || (   strncmp(pszPlaceholder, s_szPrefixInsert, sizeof(s_szPrefixInsert) - 1) != 0
-                    && strncmp(pszPlaceholder, s_szPrefixCond,   sizeof(s_szPrefixCond)   - 1) != 0
-                    && strncmp(pszPlaceholder, s_szPrefixCondGuestOs,   sizeof(s_szPrefixCondGuestOs) - 1) != 0) )
+                    && strncmp(pszPlaceholder, s_szPrefixCond,   sizeof(s_szPrefixCond)   - 1) != 0 ) )
             {
                 hrc = mpSetError->setError(E_FAIL, mpSetError->tr("Malformed template placeholder '%.*s'"),
@@ -188,6 +183,7 @@
              *                    one from the condition.
              */
-            else if ( strncmp(pszPlaceholder, s_szPrefixCond, sizeof(s_szPrefixCond) - 1U) == 0 )
-            {
+            else
+            {
+                Assert(strncmp(pszPlaceholder, s_szPrefixCond, sizeof(s_szPrefixCond) - 1) == 0);
                 if (cConds + 1 < RT_ELEMENTS(aConds))
                 {
@@ -195,56 +191,4 @@
                     bool fNewOutputting = fOutputting;
                     hrc = getConditional(pszPlaceholder, cchPlaceholder, &fNewOutputting);
-                    if (SUCCEEDED(hrc))
-                        fOutputting = fOutputting && fNewOutputting;
-                    else
-                        break;
-                    cConds++;
-                }
-                else
-                {
-                    hrc = mpSetError->setErrorBoth(E_FAIL, VERR_PARSE_ERROR,
-                                                   mpSetError->tr("Too deep conditional nesting at offset %zu (%#zx)"),
-                                                   offPlaceholder, offPlaceholder);
-                    break;
-                }
-            }
-            /*
-             * @@VBOX_GUEST_OS_COND_END@@: Pop one item of the conditional stack.
-             */
-            else if ( strncmp(pszPlaceholder, s_szPrefixCondGuestOsEnd, sizeof(s_szPrefixCondGuestOsEnd) - 1U) == 0 )
-            {
-                if (cConds > 0)
-                {
-                    cConds--;
-                    fOutputting = aConds[cConds].fSavedOutputting;
-                }
-                else
-                {
-                    hrc = mpSetError->setErrorBoth(E_FAIL, VERR_PARSE_ERROR,
-                                                   mpSetError->tr("%s without @@VBOX_GUEST_OS_COND_XXX@@ at offset %zu (%#zx)"),
-                                                   s_szPrefixCondGuestOsEnd, offPlaceholder, offPlaceholder);
-                    break;
-                }
-            }
-            /*
-             * @@VBOX_GUEST_OS_COND_XXX@@: Push the previous outputting state and combine it with the
-             *                             one from the condition.
-             */
-            else
-            {
-                Assert(strncmp(pszPlaceholder, s_szPrefixCondGuestOs, sizeof(s_szPrefixCondGuestOs) - 1) == 0);
-                if (cConds + 1 < RT_ELEMENTS(aConds))
-                {
-                    aConds[cConds].fSavedOutputting = fOutputting;
-                    bool fNewOutputting = fOutputting;
-
-                    //offTemplate is the beginning of content, offEndContent is the end of content
-                    //@@PLACEHOLDER_BEGIN@@Content@@PLACEHOLDER_END@@
-                    //                    ^       ^
-                    //                    |       |
-                    //             offTemplate  offEndContent
-                    size_t offEndContent = mStrScriptFullContent.find(s_szPrefix, offTemplate);
-                    size_t cchContent = offEndContent - offTemplate - 1;
-                    hrc = getGuestOSConditional(pszPlaceholder, cchPlaceholder, cchContent, &cchInternalCorrect, &fNewOutputting);
                     if (SUCCEEDED(hrc))
                         fOutputting = fOutputting && fNewOutputting;
@@ -499,85 +443,4 @@
 }
 
-HRESULT UnattendedScriptTemplate::getGuestOSConditional(const char *pachPlaceholder,
-                                                        size_t cchPlaceholder,
-                                                        size_t cchContent,
-                                                        size_t *cchCorrect,
-                                                        bool *pfOutputting)
-{
-#define IS_PLACEHOLDER_MATCH(a_szMatch) \
-        (   cchPlaceholder == sizeof("@@VBOX_GUEST_OS_COND_" a_szMatch "@@") - 1U \
-         && memcmp(pachPlaceholder, "@@VBOX_GUEST_OS_COND_" a_szMatch "@@", sizeof("@@VBOX_GUEST_OS_COND_" a_szMatch "@@") - 1U) == 0)
-
-    if ( IS_PLACEHOLDER_MATCH("VERSION") )
-    {
-        Utf8Str strT(pachPlaceholder + cchPlaceholder, cchContent);
-        RTCList<RTCString> partList = strT.split("**");
-        Utf8Str strRequiredOSVersion;
-        if (partList.size() == 2)//when the version is placed together with the placeholder in one line in the file
-        {
-            //The case when the string has been splitted on the 2 parts:
-            //1. OS version
-            //2. Actual content
-            strRequiredOSVersion.assign(partList.at(0));
-            //cchCorrect = "**" + length of OS version string + "**"
-            *cchCorrect = 2 + partList.at(0).length() + 2;// must be subtracted from the cchContent
-        }
-        else if (partList.size() == 3)//when the version is placed on a standalone line in the file
-        {
-            //The case when the string has been splitted on the 3 parts:
-            //1. Empty string or string with only "\n"
-            //2. OS version
-            //3. Actual content
-            strRequiredOSVersion.assign(partList.at(1));
-            *cchCorrect = 2 + partList.at(0).length() + partList.at(1).length() + 2;// must be subtracted from the cchContent
-        }
-        else//case with wrong string syntax
-        {
-            *cchCorrect = 0;
-            *pfOutputting = false;
-            LogRel(("Malformed content of the template @@VBOX_GUEST_OS_COND_VERSION@@\n"));
-            return S_OK;
-        }
-
-        if (strRequiredOSVersion.isEmpty())
-            *pfOutputting = false;
-        else
-        {
-            Utf8Str strDetectedOSVersion = mpUnattended->i_getDetectedOSVersion();
-            RTCList<RTCString> partListRequired = strRequiredOSVersion.split(".");
-            RTCList<RTCString> partListDetected = strDetectedOSVersion.split(".");
-            *pfOutputting = false;//initially is set to "false"
-
-            /** @todo r=vvp: Should we check the string with a requested OS version for digits?
-             *        (with RTLocCIsDigit()) */
-            //Major version must be presented
-            if ( partListDetected.at(0).toUInt32() >= partListRequired.at(0).toUInt32() )//comparison major versions
-            {
-                //OS major versions are equal or detected guest OS major version is greater. Go further.
-                if (partListDetected.size() > 1 && partListRequired.size() > 1)//comparison minor versions
-                {
-                    if (partListDetected.at(1).toUInt32() >= partListRequired.at(1).toUInt32())
-                        //OS minor versions are equal or detected guest OS minor version is greater. Go further.
-                        *pfOutputting = true;
-                    else
-                        //The detected guest OS minor version is less than the requested one.
-                        *pfOutputting = false;
-                }
-                else
-                    //OS minor versions are absent.
-                    *pfOutputting = true;
-            }
-            else
-                //The detected guest OS major version is less than the requested one.
-                *pfOutputting = false;
-        }
-    }
-    else
-        return mpSetError->setErrorBoth(E_FAIL, VERR_NOT_FOUND, mpSetError->tr("Unknown conditional placeholder '%.*s'"),
-                                        cchPlaceholder, pachPlaceholder);
-    return S_OK;
-#undef IS_PLACEHOLDER_MATCH
-}
-
 HRESULT UnattendedScriptTemplate::getConditional(const char *pachPlaceholder, size_t cchPlaceholder, bool *pfOutputting)
 {
@@ -585,4 +448,7 @@
         (   cchPlaceholder == sizeof("@@VBOX_COND_" a_szMatch "@@") - 1U \
          && memcmp(pachPlaceholder, "@@VBOX_COND_" a_szMatch "@@", sizeof("@@VBOX_COND_" a_szMatch "@@") - 1U) == 0)
+
+#define IS_PLACEHOLDER_PARTIALLY_MATCH(a_szMatch) \
+        (memcmp(pachPlaceholder, "@@VBOX_COND_" a_szMatch, sizeof("@@VBOX_COND_" a_szMatch) - 1U) == 0)
 
     /* Install Guest Additions: */
@@ -623,4 +489,36 @@
     else if (IS_PLACEHOLDER_MATCH("HAS_PROXY"))
         *pfOutputting = mpUnattended->i_getProxy().isNotEmpty();
+    else if (IS_PLACEHOLDER_PARTIALLY_MATCH("GUEST_VERSION"))
+    {
+        //parse the placeholder and extract the OS version from there
+        RTCString strPlaceHolder(pachPlaceholder);
+        size_t startPos = sizeof("@@VBOX_COND_GUEST_VERSION") - 1;//-1 is for '\n'
+        size_t endPos = strPlaceHolder.find("@@", startPos + 2);
+        //next part should look like [>8.0.0] for example where:
+        // - "[,]" is just the brackets to wrap up the condition;
+        // - ">" is "greater". Also possible comparison is "<";
+        // - 8.0.0 is required guest OS version.
+        //The end of placeholder is "@@" like for others.
+
+        if ( strPlaceHolder[endPos] == '@'
+             && strPlaceHolder[endPos+1] == '@' )
+        {
+            if ( strPlaceHolder[startPos++] == '[' && strPlaceHolder[--endPos] == ']' )
+            {
+                char chComp = strPlaceHolder[startPos++];
+                RTCString strRequiredOSVersion = strPlaceHolder.substr(startPos, endPos - startPos);
+                RTCString strDetectedOSVersion = mpUnattended->i_getDetectedOSVersion();
+                int res = RTStrVersionCompare(strDetectedOSVersion.c_str(), strRequiredOSVersion.c_str());
+                if ( res >= 0 && chComp == '>' )
+                        *pfOutputting = true;
+                else if ( res < 0 && chComp == '<' )
+                        *pfOutputting = true;
+                else
+                    *pfOutputting = false;
+            }
+        }
+        else
+            *pfOutputting = false;//initially is set to "false"
+    }
     else
         return mpSetError->setErrorBoth(E_FAIL, VERR_NOT_FOUND, mpSetError->tr("Unknown conditional placeholder '%.*s'"),
Index: /trunk/src/VBox/Runtime/common/crypto/key-file.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/crypto/key-file.cpp	(revision 86647)
+++ /trunk/src/VBox/Runtime/common/crypto/key-file.cpp	(revision 86648)
@@ -106,4 +106,5 @@
     { g_aWords_PublicKey,     RT_ELEMENTS(g_aWords_PublicKey) },
     { g_aWords_RsaPrivateKey, RT_ELEMENTS(g_aWords_RsaPrivateKey) },
+    { g_aWords_EncryptedPrivateKey, RT_ELEMENTS(g_aWords_EncryptedPrivateKey) },
     { g_aWords_PrivateKey,    RT_ELEMENTS(g_aWords_PrivateKey) },
 };
Index: /trunk/src/VBox/Runtime/generic/http-curl.cpp
===================================================================
--- /trunk/src/VBox/Runtime/generic/http-curl.cpp	(revision 86647)
+++ /trunk/src/VBox/Runtime/generic/http-curl.cpp	(revision 86648)
@@ -404,5 +404,11 @@
 
                 *phHttp = (RTHTTP)pThis;
-
+#if 0 // XXX: uwe
+		{
+		const char *verbose = getenv("CURL_VERBOSE");
+		if (verbose != NULL && *verbose != '0')
+		  curl_easy_setopt(pThis->pCurl, CURLOPT_VERBOSE, 1L);
+		}
+#endif
                 return VINF_SUCCESS;
             }
@@ -440,7 +446,11 @@
     pThis->rcOutput                 = VINF_SUCCESS;
 
-    /* Tell the proxy configuration code to reapply settings even if they
-       didn't change as cURL has forgotten them: */
-    pThis->fReapplyProxyInfo        = true;
+#if 0 // XXX: uwe
+    {
+    const char *verbose = getenv("CURL_VERBOSE");
+    if (verbose != NULL && *verbose != '0')
+      curl_easy_setopt(pThis->pCurl, CURLOPT_VERBOSE, 1L);
+    }
+#endif
 
     return VINF_SUCCESS;
@@ -2636,4 +2646,7 @@
                 pThis->fDeleteCaFile = true;
                 pThis->pszCaFile = pszCaFile;
+
+//              RTPrintf("pszCaFile=\"%s\"\n", pszCaFile); // XXX: uwe
+
                 return VINF_SUCCESS;
             }
Index: /trunk/src/VBox/ValidationKit/tests/api/tdAppliance1.py
===================================================================
--- /trunk/src/VBox/ValidationKit/tests/api/tdAppliance1.py	(revision 86647)
+++ /trunk/src/VBox/ValidationKit/tests/api/tdAppliance1.py	(revision 86648)
@@ -61,4 +61,7 @@
         """
         fRc = True;
+
+        if not self.oTstDrv.importVBoxApi():
+            return False
 
         # Import a set of simple OVAs.
Index: /trunk/src/VBox/ValidationKit/tests/api/tdMoveVm1.py
===================================================================
--- /trunk/src/VBox/ValidationKit/tests/api/tdMoveVm1.py	(revision 86647)
+++ /trunk/src/VBox/ValidationKit/tests/api/tdMoveVm1.py	(revision 86648)
@@ -145,8 +145,4 @@
         fRc = True
         try:
-
-            ## @todo r=bird: Too much unncessary crap inside try clause.  Only oVM.moveTo needs to be here.
-            ##               Though, you could make an argument for oVM.name too, perhaps.
-
             # move machine
             reporter.log('Moving machine "%s" to the "%s"' % (oVM.name, sLocation))
@@ -236,5 +232,5 @@
 
                 reporter.log('####### Reference locations: #######')
-                for eachItem in aActuals:
+                for eachItem in aReferences:
                     reporter.log(' "%s"' % (eachItem))
 
Index: /trunk/src/libs/curl-7.64.0/lib/sendf.c
===================================================================
--- /trunk/src/libs/curl-7.64.0/lib/sendf.c	(revision 86647)
+++ /trunk/src/libs/curl-7.64.0/lib/sendf.c	(revision 86648)
@@ -828,4 +828,6 @@
     case CURLINFO_HEADER_OUT:
     case CURLINFO_HEADER_IN:
+    case CURLINFO_DATA_IN:      /* XXX: uwe */
+    case CURLINFO_DATA_OUT:     /* XXX: uwe */
       fwrite(s_infotype[type], 2, 1, data->set.err);
       fwrite(ptr, size, 1, data->set.err);
