Index: /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py	(revision 50040)
+++ /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py	(revision 50041)
@@ -49,5 +49,4 @@
 
 from get_sizes import *
-from get_components import *
 
 easy_swaps = { 
@@ -206,5 +205,5 @@
             print '\tif (pack_spu.swap)'
             print '\t{'
-            print '\t\tfor (i = 0 ; i < lookupComponents(pname) ; i++)'
+            print '\t\tfor (i = 0 ; i < crStateHlpComponentsCount(pname) ; i++)'
             print '\t\t{'
             if hard_funcs[func_name] == 'SWAPDOUBLE':
Index: /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_getshaders.c
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_getshaders.c	(revision 50040)
+++ /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_getshaders.c	(revision 50041)
@@ -99,5 +99,5 @@
 }
 
-void PACKSPU_APIENTRY packspu_GetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj)
+void PACKSPU_APIENTRY packspu_GetAttachedObjectsARB(VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * count, VBoxGLhandleARB * obj)
 {
     GET_THREAD(thread);
@@ -107,5 +107,5 @@
     if (!obj) return;
 
-    pLocal = (GLsizei*) crAlloc(maxCount*sizeof(GLhandleARB)+sizeof(GLsizei));
+    pLocal = (GLsizei*) crAlloc(maxCount*sizeof(VBoxGLhandleARB)+sizeof(GLsizei));
     if (!pLocal) return;
 
@@ -116,5 +116,5 @@
 
     if (count) *count=*pLocal;
-    crMemcpy(obj, &pLocal[1], *pLocal*sizeof(GLhandleARB));
+    crMemcpy(obj, &pLocal[1], *pLocal*sizeof(VBoxGLhandleARB));
     crFree(pLocal);
 }
@@ -122,5 +122,5 @@
 AssertCompile(sizeof(GLsizei) == 4);
 
-void PACKSPU_APIENTRY packspu_GetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog)
+void PACKSPU_APIENTRY packspu_GetInfoLogARB(VBoxGLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog)
 {
     GET_THREAD(thread);
Index: /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_glsl.c
===================================================================
--- /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_glsl.c	(revision 50040)
+++ /trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_glsl.c	(revision 50041)
@@ -130,5 +130,5 @@
 }
 
-void PACK_APIENTRY packspu_DeleteObjectARB(GLhandleARB obj)
+void PACK_APIENTRY packspu_DeleteObjectARB(VBoxGLhandleARB obj)
 {
     GLuint hwid = crStateGetProgramHWID(obj);
Index: /trunk/src/VBox/GuestHost/OpenGL/Makefile.kmk
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/Makefile.kmk	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/Makefile.kmk	(revision 50041)
@@ -177,5 +177,5 @@
 
 ifdef VBOX_WITH_CRDUMPER
-$(VBOX_PATH_CROGL_GENFILES)/dump_gen.cpp: $(PATH_SUB_CURRENT)/state_tracker/dump_gen.py $(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/crserverlib/get_sizes.py  $(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/crserverlib/get_components.py $(addprefix $(PATH_SUB_CURRENT)/state_tracker/, state_isenabled.txt state_extensions_isenabled.txt) $(VBOX_CROGL_API_FILES) | $$(dir $$@)
+$(VBOX_PATH_CROGL_GENFILES)/dump_gen.cpp: $(PATH_SUB_CURRENT)/state_tracker/dump_gen.py $(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/crserverlib/get_sizes.py $(addprefix $(PATH_SUB_CURRENT)/state_tracker/, state_isenabled.txt state_extensions_isenabled.txt) $(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)
@@ -464,5 +464,4 @@
 	$(VBOX_PATH_CROGL_GENFILES)/state_line_gen.c \
 	$(VBOX_PATH_CROGL_GENFILES)/state_multisample_gen.c \
-	$(VBOX_PATH_CROGL_GENFILES)/state_point_gen.c \
 	$(VBOX_PATH_CROGL_GENFILES)/state_polygon_gen.c \
 	$(VBOX_PATH_CROGL_GENFILES)/state_regcombiner_gen.c \
@@ -483,5 +482,4 @@
 	$(VBOX_PATH_CROGL_GENFILES)/state_line_gen.c \
 	$(VBOX_PATH_CROGL_GENFILES)/state_multisample_gen.c \
-	$(VBOX_PATH_CROGL_GENFILES)/state_point_gen.c \
 	$(VBOX_PATH_CROGL_GENFILES)/state_polygon_gen.c \
 	$(VBOX_PATH_CROGL_GENFILES)/state_regcombiner_gen.c \
@@ -571,8 +569,4 @@
 	$(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $(<D)/gendiffcode.py multisample Multisample $(<D)
 
-$(VBOX_PATH_CROGL_GENFILES)/state_point_gen.c: $(addprefix $(PATH_SUB_CURRENT)/state_tracker/, state_point.txt gendiffcode.py) | $$(dir $$@)
-	$(call MSG_GENERATE,python,$@,$<)
-	$(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $(<D)/gendiffcode.py point Point $(<D)
-
 $(VBOX_PATH_CROGL_GENFILES)/state_polygon_gen.c: $(addprefix $(PATH_SUB_CURRENT)/state_tracker/, state_polygon.txt gendiffcode.py) | $$(dir $$@)
 	$(call MSG_GENERATE,python,$@,$<)
@@ -587,5 +581,5 @@
 	$(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $(<D)/gendiffcode.py viewport Viewport $(<D)
 
-$(VBOX_PATH_CROGL_GENFILES)/state_get.c: $(addprefix $(PATH_SUB_CURRENT)/state_tracker/, state_get.py state_get.txt state_extensions_get.txt) $(VBOX_CROGL_API_FILES) | $$(dir $$@)
+$(VBOX_PATH_CROGL_GENFILES)/state_get.c: $(addprefix $(PATH_SUB_CURRENT)/state_tracker/, state_get.py state_get.txt state_extensions_get.txt get_components.py) $(VBOX_CROGL_API_FILES) | $$(dir $$@)
 	$(call MSG_GENERATE,python,$@,$<)
 	$(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $(<D)/state_get.py $(VBOX_PATH_CROGL_GLAPI) $(<D)
Index: /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/APIspec.txt
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/APIspec.txt	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/APIspec.txt	(revision 50041)
@@ -9755,5 +9755,5 @@
 
 name        GetHandleARB
-return      GLhandleARB
+return      VBoxGLhandleARB
 param       pname           GLenum
 paramprop   pname           GL_PROGRAM_OBJECT_ARB
@@ -9764,5 +9764,5 @@
 name        DeleteObjectARB
 return      void
-param       obj             GLhandleARB
+param       obj             VBoxGLhandleARB
 category    GL_ARB_shader_objects
 props       nolist
@@ -9772,6 +9772,6 @@
 alias       DetachShader
 return      void
-param       containerObj    GLhandleARB
-param       attachedObj     GLhandleARB
+param       containerObj    VBoxGLhandleARB
+param       attachedObj     VBoxGLhandleARB
 category    GL_ARB_shader_objects
 chromium    extpack
@@ -9779,5 +9779,5 @@
 name        CreateShaderObjectARB
 alias       CreateShader
-return      GLhandleARB
+return      VBoxGLhandleARB
 param       shaderType      GLenum
 paramprop   shaderType      GL_FRAGMENT_SHADER_ARB GL_VERTEX_SHADER_ARB
@@ -9789,5 +9789,5 @@
 alias       ShaderSource
 return      void
-param       shaderObj   GLhandleARB
+param       shaderObj   VBoxGLhandleARB
 param       count       GLsizei
 param       string      const GLcharARB **
@@ -9799,5 +9799,5 @@
 alias       CompileShader
 return      void
-param       shaderObj   GLhandleARB
+param       shaderObj   VBoxGLhandleARB
 category    GL_ARB_shader_objects
 chromium    nopack
@@ -9805,5 +9805,5 @@
 name        CreateProgramObjectARB
 alias       CreateProgram
-return      GLhandleARB
+return      VBoxGLhandleARB
 category    GL_ARB_shader_objects
 props       get
@@ -9813,6 +9813,6 @@
 alias       AttachShader
 return      void
-param       containerObj    GLhandleARB
-param       obj             GLhandleARB
+param       containerObj    VBoxGLhandleARB
+param       obj             VBoxGLhandleARB
 category    GL_ARB_shader_objects
 chromium    extpack
@@ -9821,5 +9821,5 @@
 alias       LinkProgram
 return      void
-param       programObj      GLhandleARB
+param       programObj      VBoxGLhandleARB
 category    GL_ARB_shader_objects
 chromium    nopack
@@ -9828,5 +9828,5 @@
 alias       UseProgram
 return      void
-param       programObj      GLhandleARB
+param       programObj      VBoxGLhandleARB
 category    GL_ARB_shader_objects
 chromium    nopack
@@ -9835,5 +9835,5 @@
 alias       ValidateProgram
 return      void
-param       programObj      GLhandleARB
+param       programObj      VBoxGLhandleARB
 category    GL_ARB_shader_objects
 chromium    nopack
@@ -10019,5 +10019,5 @@
 name        GetObjectParameterfvARB
 return      void
-param       obj         GLhandleARB
+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
@@ -10029,5 +10029,5 @@
 name        GetObjectParameterivARB
 return      void
-param       obj         GLhandleARB
+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
@@ -10039,5 +10039,5 @@
 name        GetInfoLogARB
 return      void
-param       obj         GLhandleARB
+param       obj         VBoxGLhandleARB
 param       maxLength   GLsizei
 param       length      GLsizei *
@@ -10049,8 +10049,8 @@
 name        GetAttachedObjectsARB
 return      void
-param       containerObj    GLhandleARB
+param       containerObj    VBoxGLhandleARB
 param       maxCount        GLsizei
 param       count           GLsizei *
-param       obj             GLhandleARB *
+param       obj             VBoxGLhandleARB *
 category    GL_ARB_shader_objects
 props       get
@@ -10060,5 +10060,5 @@
 alias       GetUniformLocation
 return      GLint
-param       programObj  GLhandleARB
+param       programObj  VBoxGLhandleARB
 param       name        const GLcharARB *
 category    GL_ARB_shader_objects
@@ -10069,5 +10069,5 @@
 alias       GetActiveUniform
 return      void
-param       programObj  GLhandleARB
+param       programObj  VBoxGLhandleARB
 param       index       GLuint
 param       maxLength   GLsizei
@@ -10083,5 +10083,5 @@
 alias       GetShaderSource
 return      void
-param       obj         GLhandleARB
+param       obj         VBoxGLhandleARB
 param       maxLength   GLsizei
 param       length      GLsizei *
@@ -10094,5 +10094,5 @@
 alias       GetUniformfv
 return      void
-param       programObj  GLhandleARB
+param       programObj  VBoxGLhandleARB
 param       location    GLint
 param       params      GLfloat *
@@ -10104,5 +10104,5 @@
 alias       GetUniformiv
 return      void
-param       programObj  GLhandleARB
+param       programObj  VBoxGLhandleARB
 param       location    GLint
 param       params      GLint *
@@ -10116,5 +10116,5 @@
 alias       GetActiveAttrib
 return      void
-param       programObj  GLhandleARB
+param       programObj  VBoxGLhandleARB
 param       index       GLuint
 param       maxLength   GLsizei
@@ -10130,5 +10130,5 @@
 alias       GetAttribLocation
 return      GLint
-param       programObj  GLhandleARB
+param       programObj  VBoxGLhandleARB
 param       name        const GLcharARB *
 category    GL_ARB_vertex_shader
@@ -10139,5 +10139,5 @@
 alias       BindAttribLocation
 return      void
-param       programObj  GLhandleARB
+param       programObj  VBoxGLhandleARB
 param       index       GLuint
 param       name        const GLcharARB *
Index: /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.py	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.py	(revision 50041)
@@ -647,5 +647,5 @@
 	'GLintptrARB': 4,   # XXX or 8 bytes?
 	'GLsizeiptrARB': 4, # XXX or 8 bytes?
-	'GLhandleARB': 4,
+	'VBoxGLhandleARB': 4,
 	'GLcharARB': 1,
 	'uintptr_t': 4
Index: /trunk/src/VBox/GuestHost/OpenGL/include/GL/glext.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/GL/glext.h	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/GL/glext.h	(revision 50041)
@@ -3723,27 +3723,15 @@
 #endif
 
-/* VBox: HACK ALERT! When building the host side against Mac OS X 10.7 headers,
-   /Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/OpenGL.framework/Headers/gltypes.h
-   is included and it typedefs GLhandleARB differently.  In 10.6 and earlier,
-   gl.h was included instead of gltypes.h (new file) avoiding the conflicting
-   typedef in Headers/glext.h.
-
-   Since sizeof the gltypes.h typedef is 64-bit on 64-bit platforms, we're in
-   trouble if the type is used for anything important.  Fortunately, the
-   conflict only occurs in three files: renderspu_config.c, renderspu_cocoa.c
-   and renderspu_cocoa_helper.m. */
-#ifdef RT_OS_DARWIN
-# ifndef MAC_OS_X_VERSION_MIN_REQUIRED
-#  error "MAC_OS_X_VERSION_MIN_REQUIRED is not defined"
-# endif
-# if MAC_OS_X_VERSION_MIN_REQUIRED >= 1070 && defined(__gltypes_h_)
-#  define GLhandleARB VBoxGLhandleARB
-# endif
-#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 GLhandleARB;	/* shader object handle */
+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
 
@@ -4771,15 +4759,15 @@
 #define GL_ARB_shader_objects 1
 #ifdef GL_GLEXT_PROTOTYPES
-GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB);
-GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum);
-GLAPI void APIENTRY glDetachObjectARB (GLhandleARB, GLhandleARB);
-GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum);
-GLAPI void APIENTRY glShaderSourceARB (GLhandleARB, GLsizei, const GLcharARB* *, const GLint *);
-GLAPI void APIENTRY glCompileShaderARB (GLhandleARB);
-GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void);
-GLAPI void APIENTRY glAttachObjectARB (GLhandleARB, GLhandleARB);
-GLAPI void APIENTRY glLinkProgramARB (GLhandleARB);
-GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB);
-GLAPI void APIENTRY glValidateProgramARB (GLhandleARB);
+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);
@@ -4801,25 +4789,25 @@
 GLAPI void APIENTRY glUniformMatrix3fvARB (GLint, GLsizei, GLboolean, const GLfloat *);
 GLAPI void APIENTRY glUniformMatrix4fvARB (GLint, GLsizei, GLboolean, const GLfloat *);
-GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB, GLenum, GLfloat *);
-GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB, GLenum, GLint *);
-GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *);
-GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB, GLsizei, GLsizei *, GLhandleARB *);
-GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB, const GLcharARB *);
-GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *);
-GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB, GLint, GLfloat *);
-GLAPI void APIENTRY glGetUniformivARB (GLhandleARB, GLint, GLint *);
-GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *);
-#endif /* GL_GLEXT_PROTOTYPES */
-typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
-typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname);
-typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj);
-typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
-typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);
-typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
-typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
-typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
-typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
-typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
-typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj);
+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);
@@ -4841,13 +4829,13 @@
 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) (GLhandleARB obj, GLenum pname, GLfloat *params);
-typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params);
-typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
-typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
-typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
-typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
-typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params);
-typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params);
-typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
+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
 
@@ -4855,11 +4843,11 @@
 #define GL_ARB_vertex_shader 1
 #ifdef GL_GLEXT_PROTOTYPES
-GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB, GLuint, const GLcharARB *);
-GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *);
-GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB, const GLcharARB *);
-#endif /* GL_GLEXT_PROTOTYPES */
-typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name);
-typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
-typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
+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
 
Index: /trunk/src/VBox/GuestHost/OpenGL/include/chromium.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/chromium.h	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/chromium.h	(revision 50041)
@@ -22,6 +22,6 @@
 
 #ifdef IN_RING0
-#include <common/VBoxMPUtils.h>
-#define WINGDIAPI
+# include <common/VBoxMPUtils.h>
+# define WINGDIAPI
 #endif
 /*
@@ -30,5 +30,5 @@
 
 #ifndef GL_GLEXT_PROTOTYPES
-#define GL_GLEXT_PROTOTYPES
+# define GL_GLEXT_PROTOTYPES
 #endif
 
@@ -37,7 +37,7 @@
 #  error "should not happen!"
 # endif
-#define WIN32_LEAN_AND_MEAN
-#define WGL_APIENTRY __stdcall
-#include <windows.h>
+# define WIN32_LEAN_AND_MEAN
+# define WGL_APIENTRY __stdcall
+# include <windows.h>
 #elif defined(DARWIN)
 /* nothing */
@@ -56,21 +56,21 @@
 
 #ifdef GLX
-#ifndef GLX_GLXEXT_PROTOTYPES
-#define GLX_GLXEXT_PROTOTYPES
-#endif
-#include <GL/glx.h>
+# ifndef GLX_GLXEXT_PROTOTYPES
+#  define GLX_GLXEXT_PROTOTYPES
+# endif
+# include <GL/glx.h>
 #endif
 
 #ifdef USE_OSMESA
-#include <GL/osmesa.h>
+# include <GL/osmesa.h>
 #endif
 
 #ifdef DARWIN
-#include <stddef.h>
+# include <stddef.h>
 #elif !defined(FreeBSD)
-#include <malloc.h>  /* to get ptrdiff_t used below */
-#endif
-
-#include <GL/glext.h>
+#  include <malloc.h>  /* to get ptrdiff_t used below */
+#endif
+
+#include "cr_glext.h"
 
 #ifdef __cplusplus
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_dump.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_dump.h	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_dump.h	(revision 50041)
@@ -110,5 +110,9 @@
 } 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
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_glext.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_glext.h	(revision 50041)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_glext.h	(revision 50041)
@@ -0,0 +1,34 @@
+/* $Id$ */
+
+/** @file
+ * GL chromium platform specifics
+ */
+/*
+ * Copyright (C) 2014 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 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_glstate.h	(revision 50041)
@@ -236,4 +236,6 @@
 DECLEXPORT(void) crStateSwitchContext( CRContext *from, CRContext *to );
 
+DECLEXPORT(unsigned int) crStateHlpComponentsCount( GLenum pname );
+
 typedef struct CRFBDataElement
 {
Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_protocol.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_protocol.h	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_protocol.h	(revision 50041)
@@ -70,5 +70,5 @@
 } CRNetworkPointer;
 
-#ifdef DEBUG_misha
+#if 0 //def DEBUG_misha
 #define CRDBGPTR_SETZ(_p) crMemset((_p), 0, sizeof (CRNetworkPointer))
 #define CRDBGPTR_CHECKZ(_p) do { \
Index: /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_glsl.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_glsl.h	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/state/cr_glsl.h	(revision 50041)
@@ -100,5 +100,5 @@
 DECLEXPORT(GLuint) STATE_APIENTRY crStateCreateShader(GLuint id, GLenum type);
 DECLEXPORT(GLuint) STATE_APIENTRY crStateCreateProgram(GLuint id);
-DECLEXPORT(GLuint) STATE_APIENTRY crStateDeleteObjectARB( GLhandleARB obj );
+DECLEXPORT(GLuint) STATE_APIENTRY crStateDeleteObjectARB( VBoxGLhandleARB obj );
 
 DECLEXPORT(GLboolean) STATE_APIENTRY crStateIsProgramUniformsCached(GLuint program);
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_extensions.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_extensions.c	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_extensions.c	(revision 50041)
@@ -6,6 +6,4 @@
 
 #include "packer.h"
-
-#include <GL/glext.h>
 
 int __packTexParameterNumParams( GLenum param )
Index: /trunk/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c	(revision 50041)
@@ -469,5 +469,5 @@
 }
 
-void PACK_APIENTRY crPackGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj, int * writeback)
+void PACK_APIENTRY crPackGetAttachedObjectsARB(VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * count, VBoxGLhandleARB * obj, int * writeback)
 {
 	CR_GET_PACKER_CONTEXT(pc);
@@ -477,5 +477,5 @@
 	WRITE_DATA(0, GLint, 32);
 	WRITE_DATA(4, GLenum, CR_GETATTACHEDOBJECTSARB_EXTEND_OPCODE);
-	WRITE_DATA(8, GLhandleARB, containerObj);
+	WRITE_DATA(8, VBoxGLhandleARB, containerObj);
 	WRITE_DATA(12, GLsizei, maxCount);
 	WRITE_NETWORK_POINTER(16, (void *) count);
@@ -485,5 +485,5 @@
 }
 
-void PACK_APIENTRY crPackGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog, int * writeback)
+void PACK_APIENTRY crPackGetInfoLogARB(VBoxGLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog, int * writeback)
 {
 	CR_GET_PACKER_CONTEXT(pc);
@@ -493,5 +493,5 @@
 	WRITE_DATA(0, GLint, 32);
 	WRITE_DATA(4, GLenum, CR_GETINFOLOGARB_EXTEND_OPCODE);
-	WRITE_DATA(8, GLhandleARB, obj);
+	WRITE_DATA(8, VBoxGLhandleARB, obj);
 	WRITE_DATA(12, GLsizei, maxLength);
 	WRITE_NETWORK_POINTER(16, (void *) length);
Index: /trunk/src/VBox/GuestHost/OpenGL/state_tracker/dump.cpp
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/state_tracker/dump.cpp	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/state_tracker/dump.cpp	(revision 50041)
@@ -730,5 +730,5 @@
     crRecDumpLog(pRec, hwid);
 
-    GLhandleARB *pShaders = (GLhandleARB*)crCalloc(cShaders * sizeof (*pShaders));
+    VBoxGLhandleARB *pShaders = (VBoxGLhandleARB*)crCalloc(cShaders * sizeof (*pShaders));
     if (!pShaders)
     {
@@ -741,5 +741,8 @@
     for (GLint i = 0; i < cShaders; ++i)
     {
-        crRecDumpShader(pRec, ctx, 0, pShaders[i]);
+        if (pShaders[i])
+            crRecDumpShader(pRec, ctx, 0, pShaders[i]);
+        else
+            crDmpStrF(pRec->pDumper, "WARNING: Shader[%d] is null", i);
     }
 
@@ -848,5 +851,5 @@
     crDmpStrF(pRec->pDumper, "==RECOMPILE PROGRAM ctx(%d) id(%d) hwid(%d) status(%d) shaders(%d)==", ctx->id, id, hwid, linkStatus, cShaders);
 
-    GLhandleARB *pShaders = (GLhandleARB*)crCalloc(cShaders * sizeof (*pShaders));
+    VBoxGLhandleARB *pShaders = (VBoxGLhandleARB*)crCalloc(cShaders * sizeof (*pShaders));
     if (!pShaders)
     {
@@ -1665,4 +1668,16 @@
 }
 
+DECLEXPORT(bool) crDmpHtmlIsInited(struct CR_HTML_DUMPER * pDumper)
+{
+    return !!pDumper->pFile;
+}
+
+DECLEXPORT(void) crDmpHtmlTerm(struct CR_HTML_DUMPER * pDumper)
+{
+    crDmpHtmlPrintFooter(pDumper);
+    fclose (pDumper->pFile);
+    pDumper->pFile = NULL;
+}
+
 DECLEXPORT(int) crDmpHtmlInit(struct CR_HTML_DUMPER * pDumper, const char *pszDir, const char *pszFile)
 {
@@ -1707,3 +1722,20 @@
 }
 
+DECLEXPORT(int) crDmpHtmlInitV(struct CR_HTML_DUMPER * pDumper, const char *pszDir, const char *pszFile, va_list pArgList)
+{
+    char szBuffer[4096] = {0};
+    vsprintf_s(szBuffer, sizeof (szBuffer), pszFile, pArgList);
+    return crDmpHtmlInit(pDumper, pszDir, szBuffer);
+}
+
+DECLEXPORT(int) crDmpHtmlInitF(struct CR_HTML_DUMPER * pDumper, const char *pszDir, const char *pszFile, ...)
+{
+    int rc;
+    va_list pArgList;
+    va_start(pArgList, pszFile);
+    rc = crDmpHtmlInitV(pDumper, pszDir, pszFile, pArgList);
+    va_end(pArgList);
+    return rc;
+}
+
 #endif
Index: /trunk/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py	(revision 50041)
@@ -128,6 +128,4 @@
 #endif
 """
-
-from get_components import *;
 
 texenv_mappings = {
@@ -195,5 +193,5 @@
 """
 for pname in texparam_names:
-    print "\tcComponents = lookupComponents(%s);" % pname
+    print "\tcComponents = crStateHlpComponentsCount(%s);" % pname
     print "\tAssert(cComponents <= RT_ELEMENTS(afBuf));"
     print "\tmemset(afBuf, 0, sizeof (afBuf));"
@@ -222,5 +220,5 @@
     values = texenv_mappings[target]
     for pname in values:
-        print "\tcComponents = lookupComponents(%s);" % pname
+        print "\tcComponents = crStateHlpComponentsCount(%s);" % pname
         print "\tAssert(cComponents <= RT_ELEMENTS(afBuf));"
         print "\tmemset(afBuf, 0, sizeof (afBuf));"
@@ -247,5 +245,5 @@
     print "\tcrDmpStrF(pRec->pDumper, \"===%s===\");" % coord
     for pname in texgen_names:
-        print "\tcComponents = lookupComponents(%s);" % pname
+        print "\tcComponents = crStateHlpComponentsCount(%s);" % pname
         print "\tAssert(cComponents <= RT_ELEMENTS(afBuf));"
         print "\tmemset(afBuf, 0, sizeof (afBuf));"
Index: /trunk/src/VBox/GuestHost/OpenGL/state_tracker/get_components.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/state_tracker/get_components.py	(revision 50041)
+++ /trunk/src/VBox/GuestHost/OpenGL/state_tracker/get_components.py	(revision 50041)
@@ -0,0 +1,144 @@
+# Copyright (c) 2001, Stanford University
+# All rights reserved.
+#
+# See the file LICENSE.txt for information on redistributing this software.
+
+num_components = {
+	'GL_AMBIENT' : 4, 
+	'GL_DIFFUSE' : 4,
+	'GL_SPECULAR' : 4,
+	'GL_POSITION' : 4,
+	'GL_SPOT_DIRECTION' : 3,
+	'GL_SPOT_EXPONENT' : 1, 
+	'GL_SPOT_CUTOFF' : 1, 
+	'GL_CONSTANT_ATTENUATION' : 1, 
+	'GL_LINEAR_ATTENUATION' : 1, 
+	'GL_QUADRATIC_ATTENUATION' : 1, 
+	'GL_EMISSION' : 4, 
+	'GL_SHININESS' : 1, 
+	'GL_COLOR_INDEXES' : 3, 
+	'GL_TEXTURE_ENV_MODE' : 1,
+	'GL_TEXTURE_ENV_COLOR' : 4, 
+	'GL_TEXTURE_GEN_MODE' : 1, 
+	'GL_OBJECT_PLANE' : 4, 
+	'GL_EYE_PLANE' : 4, 
+	'GL_TEXTURE_MAG_FILTER' : 1,
+	'GL_TEXTURE_MIN_FILTER' : 1, 
+	'GL_TEXTURE_WRAP_S' : 1, 
+	'GL_TEXTURE_WRAP_T' : 1, 
+	'GL_TEXTURE_BORDER_COLOR' : 4,
+	'GL_TEXTURE_WIDTH': 1,
+	'GL_TEXTURE_HEIGHT': 1,
+	'GL_TEXTURE_DEPTH': 1,
+	# 'GL_TEXTURE_INTERNAL_FORMAT': 1,  THIS CONFLICTS WITH GL_TEXTURE_COMPONENTS!
+	'GL_TEXTURE_BORDER': 1,
+	'GL_TEXTURE_RED_SIZE': 1,
+	'GL_TEXTURE_GREEN_SIZE': 1,
+	'GL_TEXTURE_BLUE_SIZE': 1,
+	'GL_TEXTURE_ALPHA_SIZE': 1,
+	'GL_TEXTURE_LUMINANCE_SIZE': 1,
+	'GL_TEXTURE_INTENSITY_SIZE': 1,
+	'GL_TEXTURE_COMPONENTS': 1,
+	'GL_TEXTURE_RESIDENT': 1
+}
+
+num_extended_components = {
+	'GL_TEXTURE_MAX_ANISOTROPY_EXT': ( 1, 'CR_EXT_texture_filter_anisotropic' ),
+	'GL_TEXTURE_WRAP_R': ( 1, 'CR_OPENGL_VERSION_1_2'),
+	'GL_TEXTURE_PRIORITY': ( 1, 'CR_OPENGL_VERSION_1_2'),
+	'GL_TEXTURE_MIN_LOD': ( 1, 'CR_OPENGL_VERSION_1_2'),
+	'GL_TEXTURE_MAX_LOD': ( 1, 'CR_OPENGL_VERSION_1_2'),
+	'GL_TEXTURE_BASE_LEVEL': ( 1, 'CR_OPENGL_VERSION_1_2'),
+	'GL_TEXTURE_MAX_LEVEL': ( 1, 'CR_OPENGL_VERSION_1_2'),
+	'GL_COMBINER_INPUT_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_MAPPING_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_COMPONENT_USAGE_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_AB_DOT_PRODUCT_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_CD_DOT_PRODUCT_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_MUX_SUM_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_SCALE_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_BIAS_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_AB_OUTPUT_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_CD_OUTPUT_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_SUM_OUTPUT_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_INPUT_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_INPUT_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_MAPPING_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_COMBINER_COMPONENT_USAGE_NV': ( 1, 'CR_NV_register_combiners'),
+	'GL_CONSTANT_COLOR0_NV': ( 4, 'CR_NV_register_combiners'),
+	'GL_CONSTANT_COLOR1_NV': ( 4, 'CR_NV_register_combiners'),
+	'GL_COMBINE_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_COMBINE_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_SOURCE0_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_SOURCE1_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_SOURCE2_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_SOURCE0_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_SOURCE1_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_SOURCE2_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_OPERAND0_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_OPERAND1_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_OPERAND2_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_OPERAND0_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_OPERAND1_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_OPERAND2_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_RGB_SCALE_ARB': (1, 'CR_ARB_texture_env_combine'),
+	'GL_ALPHA_SCALE': (1, 'CR_ARB_texture_env_combine'),
+	'GL_DEPTH_TEXTURE_MODE_ARB': (1, 'CR_ARB_depth_texture'),
+	'GL_TEXTURE_DEPTH_SIZE_ARB': (1, 'CR_ARB_depth_texture'),
+	'GL_TEXTURE_COMPARE_MODE_ARB': (1, 'CR_ARB_shadow'),
+	'GL_TEXTURE_COMPARE_FUNC_ARB': (1, 'CR_ARB_shadow'),
+	'GL_TEXTURE_COMPARE_FAIL_VALUE_ARB': (1, 'CR_ARB_shadow_ambient'),
+	'GL_GENERATE_MIPMAP_SGIS': (1, 'CR_SGIS_generate_mipmap'),
+	'GL_TEXTURE_LOD_BIAS_EXT': (1, 'CR_EXT_texture_lod_bias'),
+	'GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB': (1, 'CR_any_vertex_program'),
+	'GL_CURRENT_VERTEX_ATTRIB_ARB': (4, 'CR_any_vertex_program'),
+	'GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB': (1, 'CR_any_vertex_program'),
+	'GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB': (1, 'CR_any_vertex_program'),
+	'GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB': (1, 'CR_any_vertex_program'),
+	'GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB': (1, 'CR_any_vertex_program'),
+	'GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB': (1, 'CR_any_vertex_program'),
+	'GL_TRACK_MATRIX_NV': (24, 'CR_any_vertex_program'),
+	'GL_TRACK_MATRIX_TRANSFORM_NV': (24, 'CR_any_vertex_program'),
+	'GL_BUFFER_SIZE_ARB': (1, 'CR_ARB_vertex_buffer_object'),
+	'GL_BUFFER_USAGE_ARB': (1, 'CR_ARB_vertex_buffer_object'),
+	'GL_BUFFER_ACCESS_ARB': (1, 'CR_ARB_vertex_buffer_object'),
+	'GL_BUFFER_MAPPED_ARB': (1, 'CR_ARB_vertex_buffer_object'),
+	'GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB': (1, 'CR_ARB_vertex_buffer_object'),
+	'GL_QUERY_COUNTER_BITS_ARB': (1, 'CR_ARB_occlusion_query'),
+	'GL_QUERY_RESULT_AVAILABLE_ARB': (1, 'CR_ARB_occlusion_query'),
+	'GL_QUERY_RESULT_ARB': (1, 'CR_ARB_occlusion_query'),
+	'GL_CURRENT_QUERY_ARB': (1, 'CR_ARB_occlusion_query'),
+	'GL_TEXTURE_COMPRESSED_IMAGE_SIZE': (1, 'CR_ARB_texture_compression'),
+    'GL_TEXTURE_COMPRESSED': (1, 'CR_ARB_texture_compression'),
+	'GL_COORD_REPLACE_ARB': (1, 'CR_ARB_point_sprite'),
+}
+
+print """unsigned int crStateHlpComponentsCount( GLenum pname )
+{
+	switch( pname )
+	{
+"""
+comps = num_components.keys();
+comps.sort();
+for comp in comps:
+	print '\t\t\tcase %s: return %d;' % (comp,num_components[comp])
+
+comps = num_extended_components.keys();
+comps.sort();
+for comp in comps:
+	(nc, ifdef) = num_extended_components[comp]
+	print '#ifdef %s' % ifdef
+	print '\t\t\tcase %s: return %d;' % (comp,nc)
+	print '#endif /* %s */' % ifdef
+
+print """
+		default:
+			crError( "Unknown parameter name in crStateHlpComponentsCount: %d", (int) pname );
+			break;
+	}
+	/* NOTREACHED */
+	return 0;
+}
+"""
+
+
Index: /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_get.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_get.py	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_get.py	(revision 50041)
@@ -234,2 +234,4 @@
 	print '\t}'
 	print '}'
+
+from get_components import *
Index: /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c	(revision 50041)
@@ -259,5 +259,5 @@
 }
 
-DECLEXPORT(GLuint) STATE_APIENTRY crStateDeleteObjectARB( GLhandleARB obj )
+DECLEXPORT(GLuint) STATE_APIENTRY crStateDeleteObjectARB( VBoxGLhandleARB obj )
 {
     GLuint hwId = crStateGetProgramHWID(obj);
Index: /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_point.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_point.c	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_point.c	(revision 50041)
@@ -201,2 +201,247 @@
 	crStatePointParameterfvARB( pname, &f_param );
 }
+
+void crStatePointDiff(CRPointBits *b, CRbitvalue *bitID,
+        CRContext *fromCtx, CRContext *toCtx)
+{
+    CRPointState *from = &(fromCtx->point);
+    CRPointState *to = &(toCtx->point);
+    unsigned int j, i;
+    CRbitvalue nbitID[CR_MAX_BITARRAY];
+    Assert(0);
+    for (j=0;j<CR_MAX_BITARRAY;j++)
+        nbitID[j] = ~bitID[j];
+    i = 0; /* silence compiler */
+    if (CHECKDIRTY(b->enableSmooth, bitID))
+    {
+        glAble able[2];
+        able[0] = diff_api.Disable;
+        able[1] = diff_api.Enable;
+        if (from->pointSmooth != to->pointSmooth)
+        {
+            able[to->pointSmooth](GL_POINT_SMOOTH);
+            from->pointSmooth = to->pointSmooth;
+        }
+        CLEARDIRTY(b->enableSmooth, nbitID);
+    }
+    if (CHECKDIRTY(b->size, bitID))
+    {
+        if (from->pointSize != to->pointSize)
+        {
+            diff_api.PointSize (to->pointSize);
+            from->pointSize = to->pointSize;
+        }
+        CLEARDIRTY(b->size, nbitID);
+    }
+    if (CHECKDIRTY(b->minSize, bitID))
+    {
+        if (from->minSize != to->minSize)
+        {
+            diff_api.PointParameterfARB (GL_POINT_SIZE_MIN_ARB, to->minSize);
+            from->minSize = to->minSize;
+        }
+        CLEARDIRTY(b->minSize, nbitID);
+    }
+    if (CHECKDIRTY(b->maxSize, bitID))
+    {
+        if (from->maxSize != to->maxSize)
+        {
+            diff_api.PointParameterfARB (GL_POINT_SIZE_MAX_ARB, to->maxSize);
+            from->maxSize = to->maxSize;
+        }
+        CLEARDIRTY(b->maxSize, nbitID);
+    }
+    if (CHECKDIRTY(b->fadeThresholdSize, bitID))
+    {
+        if (from->fadeThresholdSize != to->fadeThresholdSize)
+        {
+            diff_api.PointParameterfARB (GL_POINT_FADE_THRESHOLD_SIZE_ARB, to->fadeThresholdSize);
+            from->fadeThresholdSize = to->fadeThresholdSize;
+        }
+        CLEARDIRTY(b->fadeThresholdSize, nbitID);
+    }
+    if (CHECKDIRTY(b->spriteCoordOrigin, bitID))
+    {
+        if (from->spriteCoordOrigin != to->spriteCoordOrigin)
+        {
+            diff_api.PointParameterfARB (GL_POINT_SPRITE_COORD_ORIGIN, to->spriteCoordOrigin);
+            from->spriteCoordOrigin = to->spriteCoordOrigin;
+        }
+        CLEARDIRTY(b->spriteCoordOrigin, nbitID);
+    }
+    if (CHECKDIRTY(b->distanceAttenuation, bitID))
+    {
+        if (from->distanceAttenuation[0] != to->distanceAttenuation[0] || from->distanceAttenuation[1] != to->distanceAttenuation[1] || from->distanceAttenuation[2] != to->distanceAttenuation[2]) {
+            diff_api.PointParameterfvARB (GL_POINT_DISTANCE_ATTENUATION_ARB, to->distanceAttenuation);
+            from->distanceAttenuation[0] = to->distanceAttenuation[0];
+            from->distanceAttenuation[1] = to->distanceAttenuation[1];
+            from->distanceAttenuation[2] = to->distanceAttenuation[2];
+        }
+        CLEARDIRTY(b->distanceAttenuation, nbitID);
+    }
+    if (CHECKDIRTY(b->enableSprite, bitID))
+    {
+        glAble able[2];
+        able[0] = diff_api.Disable;
+        able[1] = diff_api.Enable;
+        if (from->pointSprite != to->pointSprite)
+        {
+            able[to->pointSprite](GL_POINT_SPRITE_ARB);
+            from->pointSprite = to->pointSprite;
+        }
+        CLEARDIRTY(b->enableSprite, nbitID);
+    }
+    {
+        unsigned int activeUnit = (unsigned int) -1;
+        for (i = 0; i < CR_MAX_TEXTURE_UNITS; i++) {
+            if (CHECKDIRTY(b->coordReplacement[i], bitID))
+            {
+                GLint replacement = to->coordReplacement[i];
+                if (activeUnit != i) {
+                     diff_api.ActiveTextureARB(i + GL_TEXTURE0_ARB );
+                     activeUnit = i;
+                }
+                diff_api.TexEnviv(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, &replacement);
+                from->coordReplacement[i] = to->coordReplacement[i];
+                CLEARDIRTY(b->coordReplacement[i], nbitID);
+            }
+        }
+        if (activeUnit != toCtx->texture.curTextureUnit)
+           diff_api.ActiveTextureARB(GL_TEXTURE0 + toCtx->texture.curTextureUnit);
+    }
+    CLEARDIRTY(b->dirty, nbitID);
+}
+
+void crStatePointSwitch(CRPointBits *b, CRbitvalue *bitID,
+        CRContext *fromCtx, CRContext *toCtx)
+{
+    CRPointState *from = &(fromCtx->point);
+    CRPointState *to = &(toCtx->point);
+    unsigned int j, i;
+    GLboolean fEnabled;
+    CRbitvalue nbitID[CR_MAX_BITARRAY];
+    for (j=0;j<CR_MAX_BITARRAY;j++)
+        nbitID[j] = ~bitID[j];
+    i = 0; /* silence compiler */
+    if (CHECKDIRTY(b->enableSmooth, bitID))
+    {
+        glAble able[2];
+        able[0] = diff_api.Disable;
+        able[1] = diff_api.Enable;
+        if (from->pointSmooth != to->pointSmooth)
+        {
+            able[to->pointSmooth](GL_POINT_SMOOTH);
+            FILLDIRTY(b->enableSmooth);
+            FILLDIRTY(b->dirty);
+        }
+        CLEARDIRTY(b->enableSmooth, nbitID);
+    }
+    if (CHECKDIRTY(b->size, bitID))
+    {
+        if (from->pointSize != to->pointSize)
+        {
+            diff_api.PointSize (to->pointSize);
+            FILLDIRTY(b->size);
+            FILLDIRTY(b->dirty);
+        }
+        CLEARDIRTY(b->size, nbitID);
+    }
+    if (CHECKDIRTY(b->minSize, bitID))
+    {
+        if (from->minSize != to->minSize)
+        {
+            diff_api.PointParameterfARB (GL_POINT_SIZE_MIN_ARB, to->minSize);
+            FILLDIRTY(b->minSize);
+            FILLDIRTY(b->dirty);
+        }
+        CLEARDIRTY(b->minSize, nbitID);
+    }
+    if (CHECKDIRTY(b->maxSize, bitID))
+    {
+        if (from->maxSize != to->maxSize)
+        {
+            diff_api.PointParameterfARB (GL_POINT_SIZE_MAX_ARB, to->maxSize);
+            FILLDIRTY(b->maxSize);
+            FILLDIRTY(b->dirty);
+        }
+        CLEARDIRTY(b->maxSize, nbitID);
+    }
+    if (CHECKDIRTY(b->fadeThresholdSize, bitID))
+    {
+        if (from->fadeThresholdSize != to->fadeThresholdSize)
+        {
+            diff_api.PointParameterfARB (GL_POINT_FADE_THRESHOLD_SIZE_ARB, to->fadeThresholdSize);
+            FILLDIRTY(b->fadeThresholdSize);
+            FILLDIRTY(b->dirty);
+        }
+        CLEARDIRTY(b->fadeThresholdSize, nbitID);
+    }
+    if (CHECKDIRTY(b->spriteCoordOrigin, bitID))
+    {
+        if (from->spriteCoordOrigin != to->spriteCoordOrigin)
+        {
+            diff_api.PointParameterfARB (GL_POINT_SPRITE_COORD_ORIGIN, to->spriteCoordOrigin);
+            FILLDIRTY(b->spriteCoordOrigin);
+            FILLDIRTY(b->dirty);
+        }
+        CLEARDIRTY(b->spriteCoordOrigin, nbitID);
+    }
+    if (CHECKDIRTY(b->distanceAttenuation, bitID))
+    {
+        if (from->distanceAttenuation[0] != to->distanceAttenuation[0] || from->distanceAttenuation[1] != to->distanceAttenuation[1] || from->distanceAttenuation[2] != to->distanceAttenuation[2]) {
+            diff_api.PointParameterfvARB (GL_POINT_DISTANCE_ATTENUATION_ARB, to->distanceAttenuation);
+            FILLDIRTY(b->distanceAttenuation);
+            FILLDIRTY(b->dirty);
+        }
+        CLEARDIRTY(b->distanceAttenuation, nbitID);
+    }
+    fEnabled = from->pointSprite;
+    {
+        unsigned int activeUnit = (unsigned int) -1;
+        for (i = 0; i < CR_MAX_TEXTURE_UNITS; i++) {
+            if (CHECKDIRTY(b->coordReplacement[i], bitID))
+            {
+                if (!fEnabled)
+                {
+                    diff_api.Enable(GL_POINT_SPRITE_ARB);
+                    fEnabled = GL_TRUE;
+                }
+#if 0
+                /*don't set coord replacement, it will be set just before drawing points when necessary,
+                 * to work around gpu driver bugs
+                 * See crServerDispatch[Begin|End|Draw*] */
+                GLint replacement = to->coordReplacement[i];
+                if (activeUnit != i) {
+                     diff_api.ActiveTextureARB(i + GL_TEXTURE0_ARB );
+                     activeUnit = i;
+                }
+                diff_api.TexEnviv(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, &replacement);
+#endif
+                CLEARDIRTY(b->coordReplacement[i], nbitID);
+            }
+        }
+        if (activeUnit != toCtx->texture.curTextureUnit)
+           diff_api.ActiveTextureARB(GL_TEXTURE0 + toCtx->texture.curTextureUnit);
+    }
+    if (CHECKDIRTY(b->enableSprite, bitID))
+    {
+        glAble able[2];
+        able[0] = diff_api.Disable;
+        able[1] = diff_api.Enable;
+        if (fEnabled != to->pointSprite)
+        {
+            able[to->pointSprite](GL_POINT_SPRITE_ARB);
+            FILLDIRTY(b->enableSprite);
+            FILLDIRTY(b->dirty);
+        }
+        CLEARDIRTY(b->enableSprite, nbitID);
+    }
+    else if (fEnabled != to->pointSprite)
+    {
+        glAble able[2];
+        able[0] = diff_api.Disable;
+        able[1] = diff_api.Enable;
+        able[to->pointSprite](GL_POINT_SPRITE_ARB);
+    }
+    CLEARDIRTY(b->dirty, nbitID);
+}
Index: /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c	(revision 50040)
+++ /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c	(revision 50041)
@@ -3260,8 +3260,26 @@
                                                     const GLclampf *priorities) 
 {
-    UNUSED(n);
-    UNUSED(textures);
+    CRContext *g = GetCurrentContext();
+    CRTextureObj *tobj;
+    GLsizei i;
     UNUSED(priorities);
-    /* TODO: */
+
+    for (i = 0; i < n; ++i)
+    {
+        GLuint tex = textures[i];
+        GET_TOBJ(tobj, g, tex);
+        if (!tobj)
+        {
+            Assert(crHashtableIsKeyUsed(g->shared->textureTable, tex));
+            tobj = crStateTextureAllocate_t(g, tex);
+        }
+
+        /* so far the code just ensures the tex object is created to make
+         * the crserverlib code be able to pass it to host ogl */
+
+        /* TODO: store texture priorities in the state data to be able to restore it properly
+         * on save state load */
+    }
+
     return;
 }
Index: /trunk/src/VBox/HostServices/SharedOpenGL/Makefile.kmk
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/Makefile.kmk	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/Makefile.kmk	(revision 50041)
@@ -175,5 +175,5 @@
 	$(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) $(<D)
 
-$(VBOX_PATH_CROGL_GENFILES)/server_get.c: $(addprefix $(PATH_SUB_CURRENT)/crserverlib/, server_get.py server_special get_components.py) $(VBOX_CROGL_API_FILES) | $$(dir $$@)
+$(VBOX_PATH_CROGL_GENFILES)/server_get.c: $(addprefix $(PATH_SUB_CURRENT)/crserverlib/, server_get.py server_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)
Index: unk/src/VBox/HostServices/SharedOpenGL/crserverlib/get_components.py
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/get_components.py	(revision 50040)
+++ 	(revision )
@@ -1,144 +1,0 @@
-# Copyright (c) 2001, Stanford University
-# All rights reserved.
-#
-# See the file LICENSE.txt for information on redistributing this software.
-
-num_components = {
-	'GL_AMBIENT' : 4, 
-	'GL_DIFFUSE' : 4,
-	'GL_SPECULAR' : 4,
-	'GL_POSITION' : 4,
-	'GL_SPOT_DIRECTION' : 3,
-	'GL_SPOT_EXPONENT' : 1, 
-	'GL_SPOT_CUTOFF' : 1, 
-	'GL_CONSTANT_ATTENUATION' : 1, 
-	'GL_LINEAR_ATTENUATION' : 1, 
-	'GL_QUADRATIC_ATTENUATION' : 1, 
-	'GL_EMISSION' : 4, 
-	'GL_SHININESS' : 1, 
-	'GL_COLOR_INDEXES' : 3, 
-	'GL_TEXTURE_ENV_MODE' : 1,
-	'GL_TEXTURE_ENV_COLOR' : 4, 
-	'GL_TEXTURE_GEN_MODE' : 1, 
-	'GL_OBJECT_PLANE' : 4, 
-	'GL_EYE_PLANE' : 4, 
-	'GL_TEXTURE_MAG_FILTER' : 1,
-	'GL_TEXTURE_MIN_FILTER' : 1, 
-	'GL_TEXTURE_WRAP_S' : 1, 
-	'GL_TEXTURE_WRAP_T' : 1, 
-	'GL_TEXTURE_BORDER_COLOR' : 4,
-	'GL_TEXTURE_WIDTH': 1,
-	'GL_TEXTURE_HEIGHT': 1,
-	'GL_TEXTURE_DEPTH': 1,
-	# 'GL_TEXTURE_INTERNAL_FORMAT': 1,  THIS CONFLICTS WITH GL_TEXTURE_COMPONENTS!
-	'GL_TEXTURE_BORDER': 1,
-	'GL_TEXTURE_RED_SIZE': 1,
-	'GL_TEXTURE_GREEN_SIZE': 1,
-	'GL_TEXTURE_BLUE_SIZE': 1,
-	'GL_TEXTURE_ALPHA_SIZE': 1,
-	'GL_TEXTURE_LUMINANCE_SIZE': 1,
-	'GL_TEXTURE_INTENSITY_SIZE': 1,
-	'GL_TEXTURE_COMPONENTS': 1,
-	'GL_TEXTURE_RESIDENT': 1
-}
-
-num_extended_components = {
-	'GL_TEXTURE_MAX_ANISOTROPY_EXT': ( 1, 'CR_EXT_texture_filter_anisotropic' ),
-	'GL_TEXTURE_WRAP_R': ( 1, 'CR_OPENGL_VERSION_1_2'),
-	'GL_TEXTURE_PRIORITY': ( 1, 'CR_OPENGL_VERSION_1_2'),
-	'GL_TEXTURE_MIN_LOD': ( 1, 'CR_OPENGL_VERSION_1_2'),
-	'GL_TEXTURE_MAX_LOD': ( 1, 'CR_OPENGL_VERSION_1_2'),
-	'GL_TEXTURE_BASE_LEVEL': ( 1, 'CR_OPENGL_VERSION_1_2'),
-	'GL_TEXTURE_MAX_LEVEL': ( 1, 'CR_OPENGL_VERSION_1_2'),
-	'GL_COMBINER_INPUT_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_MAPPING_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_COMPONENT_USAGE_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_AB_DOT_PRODUCT_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_CD_DOT_PRODUCT_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_MUX_SUM_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_SCALE_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_BIAS_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_AB_OUTPUT_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_CD_OUTPUT_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_SUM_OUTPUT_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_INPUT_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_INPUT_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_MAPPING_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_COMBINER_COMPONENT_USAGE_NV': ( 1, 'CR_NV_register_combiners'),
-	'GL_CONSTANT_COLOR0_NV': ( 4, 'CR_NV_register_combiners'),
-	'GL_CONSTANT_COLOR1_NV': ( 4, 'CR_NV_register_combiners'),
-	'GL_COMBINE_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_COMBINE_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_SOURCE0_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_SOURCE1_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_SOURCE2_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_SOURCE0_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_SOURCE1_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_SOURCE2_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_OPERAND0_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_OPERAND1_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_OPERAND2_RGB_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_OPERAND0_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_OPERAND1_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_OPERAND2_ALPHA_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_RGB_SCALE_ARB': (1, 'CR_ARB_texture_env_combine'),
-	'GL_ALPHA_SCALE': (1, 'CR_ARB_texture_env_combine'),
-	'GL_DEPTH_TEXTURE_MODE_ARB': (1, 'CR_ARB_depth_texture'),
-	'GL_TEXTURE_DEPTH_SIZE_ARB': (1, 'CR_ARB_depth_texture'),
-	'GL_TEXTURE_COMPARE_MODE_ARB': (1, 'CR_ARB_shadow'),
-	'GL_TEXTURE_COMPARE_FUNC_ARB': (1, 'CR_ARB_shadow'),
-	'GL_TEXTURE_COMPARE_FAIL_VALUE_ARB': (1, 'CR_ARB_shadow_ambient'),
-	'GL_GENERATE_MIPMAP_SGIS': (1, 'CR_SGIS_generate_mipmap'),
-	'GL_TEXTURE_LOD_BIAS_EXT': (1, 'CR_EXT_texture_lod_bias'),
-	'GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB': (1, 'CR_any_vertex_program'),
-	'GL_CURRENT_VERTEX_ATTRIB_ARB': (4, 'CR_any_vertex_program'),
-	'GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB': (1, 'CR_any_vertex_program'),
-	'GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB': (1, 'CR_any_vertex_program'),
-	'GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB': (1, 'CR_any_vertex_program'),
-	'GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB': (1, 'CR_any_vertex_program'),
-	'GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB': (1, 'CR_any_vertex_program'),
-	'GL_TRACK_MATRIX_NV': (24, 'CR_any_vertex_program'),
-	'GL_TRACK_MATRIX_TRANSFORM_NV': (24, 'CR_any_vertex_program'),
-	'GL_BUFFER_SIZE_ARB': (1, 'CR_ARB_vertex_buffer_object'),
-	'GL_BUFFER_USAGE_ARB': (1, 'CR_ARB_vertex_buffer_object'),
-	'GL_BUFFER_ACCESS_ARB': (1, 'CR_ARB_vertex_buffer_object'),
-	'GL_BUFFER_MAPPED_ARB': (1, 'CR_ARB_vertex_buffer_object'),
-	'GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB': (1, 'CR_ARB_vertex_buffer_object'),
-	'GL_QUERY_COUNTER_BITS_ARB': (1, 'CR_ARB_occlusion_query'),
-	'GL_QUERY_RESULT_AVAILABLE_ARB': (1, 'CR_ARB_occlusion_query'),
-	'GL_QUERY_RESULT_ARB': (1, 'CR_ARB_occlusion_query'),
-	'GL_CURRENT_QUERY_ARB': (1, 'CR_ARB_occlusion_query'),
-	'GL_TEXTURE_COMPRESSED_IMAGE_SIZE': (1, 'CR_ARB_texture_compression'),
-    'GL_TEXTURE_COMPRESSED': (1, 'CR_ARB_texture_compression'),
-	'GL_COORD_REPLACE_ARB': (1, 'CR_ARB_point_sprite'),
-}
-
-print """static unsigned int lookupComponents( GLenum pname )
-{
-	switch( pname )
-	{
-"""
-comps = num_components.keys();
-comps.sort();
-for comp in comps:
-	print '\t\t\tcase %s: return %d;' % (comp,num_components[comp])
-
-comps = num_extended_components.keys();
-comps.sort();
-for comp in comps:
-	(nc, ifdef) = num_extended_components[comp]
-	print '#ifdef %s' % ifdef
-	print '\t\t\tcase %s: return %d;' % (comp,nc)
-	print '#endif /* %s */' % ifdef
-
-print """
-		default:
-			crError( "Unknown parameter name in lookupComponents: %d", (int) pname );
-			break;
-	}
-	/* NOTREACHED */
-	return 0;
-}
-"""
-
-
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h	(revision 50041)
@@ -250,4 +250,17 @@
     *pu8Val2 = tmp;
 }
+
+#ifdef DEBUG
+# define CR_GLERR_CHECK(_op) do { \
+        GLenum status; \
+        while ((status = cr_server.head_spu->dispatch_table.GetError()) != GL_NO_ERROR) {/*Assert(0);*/} \
+        _op \
+        while ((status = cr_server.head_spu->dispatch_table.GetError()) != GL_NO_ERROR) {Assert(0);} \
+    } while (0)
+#else
+# define CR_GLERR_CHECK(_op) do { \
+        _op \
+    } while (0)
+#endif
 
 #ifdef DEBUG_misha
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_get.py
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_get.py	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_get.py	(revision 50041)
@@ -109,6 +109,4 @@
 ];
 
-from get_components import *;
-
 keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
 for func_name in keys:
@@ -143,4 +141,4 @@
             print '\tcrServerReturnValue( &(%s[0]), %d*sizeof(%s) );' % (local_argname, max_components[func_name], local_argtype );
         else:
-            print '\tcrServerReturnValue( &(%s[0]), lookupComponents(pname)*sizeof(%s) );' % (local_argname, local_argtype );
+            print '\tcrServerReturnValue( &(%s[0]), crStateHlpComponentsCount(pname)*sizeof(%s) );' % (local_argname, local_argtype );
         print '}\n'
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c	(revision 50041)
@@ -98,17 +98,17 @@
 }
 
-void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj)
-{
-    GLsizei *pLocal;
-
-    pLocal = (GLsizei*) crAlloc(maxCount*sizeof(GLhandleARB)+sizeof(GLsizei));
-    if (!pLocal)
-    {
-        GLsizei zero=0;
-        crServerReturnValue(&zero, sizeof(zero));
-    }
-    /* initial (fallback )value */
-    *pLocal = 0;
-    cr_server.head_spu->dispatch_table.GetAttachedObjectsARB(crStateGetProgramHWID(containerObj), maxCount, pLocal, (GLhandleARB*)&pLocal[1]);
+void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedObjectsARB(VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * count, VBoxGLhandleARB * obj)
+{
+    GLsizei *pLocal;
+
+    pLocal = (GLsizei*) crAlloc(maxCount*sizeof(VBoxGLhandleARB)+sizeof(GLsizei));
+    if (!pLocal)
+    {
+        GLsizei zero=0;
+        crServerReturnValue(&zero, sizeof(zero));
+    }
+    /* initial (fallback )value */
+    *pLocal = 0;
+    cr_server.head_spu->dispatch_table.GetAttachedObjectsARB(crStateGetProgramHWID(containerObj), maxCount, pLocal, (VBoxGLhandleARB*)&pLocal[1]);
 
     {
@@ -120,5 +120,5 @@
     }
 
-    crServerReturnValue(pLocal, (*pLocal)*sizeof(GLhandleARB)+sizeof(GLsizei));
+    crServerReturnValue(pLocal, (*pLocal)*sizeof(VBoxGLhandleARB)+sizeof(GLsizei));
     crFree(pLocal);
 }
@@ -126,5 +126,5 @@
 AssertCompile(sizeof(GLsizei) == 4);
 
-void SERVER_DISPATCH_APIENTRY crServerDispatchGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog)
+void SERVER_DISPATCH_APIENTRY crServerDispatchGetInfoLogARB(VBoxGLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog)
 {
     GLsizei *pLocal;
@@ -305,5 +305,5 @@
 }
 
-void SERVER_DISPATCH_APIENTRY crServerDispatchGetObjectParameterfvARB( GLhandleARB obj, GLenum pname, GLfloat * params )
+void SERVER_DISPATCH_APIENTRY crServerDispatchGetObjectParameterfvARB( VBoxGLhandleARB obj, GLenum pname, GLfloat * params )
 {
     GLfloat local_params[1];
@@ -324,5 +324,5 @@
 }
 
-void SERVER_DISPATCH_APIENTRY crServerDispatchGetObjectParameterivARB( GLhandleARB obj, GLenum pname, GLint * params )
+void SERVER_DISPATCH_APIENTRY crServerDispatchGetObjectParameterivARB( VBoxGLhandleARB obj, GLenum pname, GLint * params )
 {
     GLint local_params[1];
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c	(revision 50041)
@@ -112,5 +112,5 @@
 }
 
-void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteObjectARB(GLhandleARB obj)
+void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteObjectARB(VBoxGLhandleARB obj)
 {
     GLuint hwid =  crStateDeleteObjectARB(obj);
@@ -130,7 +130,7 @@
 }
 
-GLhandleARB SERVER_DISPATCH_APIENTRY crServerDispatchGetHandleARB( GLenum pname )
+VBoxGLhandleARB SERVER_DISPATCH_APIENTRY crServerDispatchGetHandleARB( GLenum pname )
 {
-    GLhandleARB retval;
+    VBoxGLhandleARB retval;
     retval = cr_server.head_spu->dispatch_table.GetHandleARB(pname);
     if (pname==GL_PROGRAM_OBJECT_ARB)
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_lists.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_lists.c	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_lists.c	(revision 50041)
@@ -308,4 +308,6 @@
     }
 
+    crStatePrioritizeTextures(n, textures, priorities);
+
     for (i = 0; i < n; i++)
     {
@@ -313,5 +315,4 @@
     }
 
-    crStatePrioritizeTextures(n, textures, priorities);
     cr_server.head_spu->dispatch_table.PrioritizeTextures(n, newTextures, priorities);
     crFree(newTextures);
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c	(revision 50041)
@@ -332,5 +332,5 @@
 #endif
 
-//    cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
+    cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
 
     if (cr_server.bUseMultipleContexts)
@@ -396,4 +396,12 @@
     crStateDiffAPI( &(cr_server.head_spu->dispatch_table) );
 
+#ifdef VBOX_WITH_CRSERVER_DUMPER
+    crMemset(&cr_server.Recorder, 0, sizeof (cr_server.Recorder));
+    crMemset(&cr_server.RecorderBlitter, 0, sizeof (cr_server.RecorderBlitter));
+    crMemset(&cr_server.DbgPrintDumper, 0, sizeof (cr_server.DbgPrintDumper));
+    crMemset(&cr_server.HtmlDumper, 0, sizeof (cr_server.HtmlDumper));
+    cr_server.pDumper = NULL;
+#endif
+
     crUnpackSetReturnPointer( &(cr_server.return_ptr) );
     crUnpackSetWritebackPointer( &(cr_server.writeback_ptr) );
@@ -432,5 +440,5 @@
 #endif
 
-//    cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
+    cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
 
     if (cr_server.bUseMultipleContexts)
@@ -509,4 +517,12 @@
     crServerInitTmpCtxDispatch();
     crStateDiffAPI( &(cr_server.head_spu->dispatch_table) );
+
+#ifdef VBOX_WITH_CRSERVER_DUMPER
+    crMemset(&cr_server.Recorder, 0, sizeof (cr_server.Recorder));
+    crMemset(&cr_server.RecorderBlitter, 0, sizeof (cr_server.RecorderBlitter));
+    crMemset(&cr_server.DbgPrintDumper, 0, sizeof (cr_server.DbgPrintDumper));
+    crMemset(&cr_server.HtmlDumper, 0, sizeof (cr_server.HtmlDumper));
+    cr_server.pDumper = NULL;
+#endif
 
     /*Check for PBO support*/
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_misc.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_misc.c	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_misc.c	(revision 50041)
@@ -1398,6 +1398,11 @@
 int64_t g_CrDbgDumpPid = 0;
 unsigned long g_CrDbgDumpEnabled = 0;
-unsigned long g_CrDbgDumpDraw = CR_SERVER_DUMP_F_COMPILE_SHADER
+unsigned long g_CrDbgDumpDraw = 0
+#if 0
+        | CR_SERVER_DUMP_F_COMPILE_SHADER
         | CR_SERVER_DUMP_F_LINK_PROGRAM
+#endif
+        ;
+#if 0
         | CR_SERVER_DUMP_F_DRAW_BUFF_ENTER
         | CR_SERVER_DUMP_F_DRAW_BUFF_LEAVE
@@ -1410,5 +1415,6 @@
         | CR_SERVER_DUMP_F_DRAWEL
         | CR_SERVER_DUMP_F_SHADER_SOURCE
-        ; //CR_SERVER_DUMP_F_DRAW_BUFF_ENTER | CR_SERVER_DUMP_F_DRAW_BUFF_LEAVE;
+        ;
+#endif
 unsigned long g_CrDbgDumpDrawFramesSettings = CR_SERVER_DUMP_F_DRAW_BUFF_ENTER
         | CR_SERVER_DUMP_F_DRAW_BUFF_LEAVE
@@ -1422,4 +1428,23 @@
 unsigned long g_CrDbgDumpDrawFramesCount = 0;
 
+uint32_t g_CrDbgDumpDrawCount = 0;
+uint32_t g_CrDbgDumpDumpOnCount = 10;
+uint32_t g_CrDbgDumpDumpOnCountEnabled = 0;
+uint32_t g_CrDbgDumpDumpOnCountPerform = 0;
+uint32_t g_CrDbgDumpDrawFlags = CR_SERVER_DUMP_F_COMPILE_SHADER
+        | CR_SERVER_DUMP_F_SHADER_SOURCE
+        | CR_SERVER_DUMP_F_COMPILE_SHADER
+        | CR_SERVER_DUMP_F_LINK_PROGRAM
+        | CR_SERVER_DUMP_F_DRAW_BUFF_ENTER
+        | CR_SERVER_DUMP_F_DRAW_BUFF_LEAVE
+        | CR_SERVER_DUMP_F_DRAW_TEX_ENTER
+        | CR_SERVER_DUMP_F_DRAW_PROGRAM_UNIFORMS_ENTER
+        | CR_SERVER_DUMP_F_DRAW_PROGRAM_ATTRIBS_ENTER
+        | CR_SERVER_DUMP_F_DRAW_PROGRAM_ENTER
+        | CR_SERVER_DUMP_F_DRAW_STATE_ENTER
+        | CR_SERVER_DUMP_F_SWAPBUFFERS_ENTER
+        | CR_SERVER_DUMP_F_DRAWEL
+        | CR_SERVER_DUMP_F_TEXPRESENT;
+
 void crServerDumpCheckTerm()
 {
@@ -1437,29 +1462,29 @@
     CRMuralInfo *pBlitterMural;
 
-    if (CrBltIsInitialized(&cr_server.RecorderBlitter))
-        return VINF_SUCCESS;
-
-    pBlitterMural = crServerGetDummyMural(cr_server.MainContextInfo.CreateInfo.visualBits);
-    if (!pBlitterMural)
-    {
-        crWarning("crServerGetDummyMural failed");
-        return VERR_GENERAL_FAILURE;
-    }
-
-    crServerVBoxBlitterWinInit(&BltWin, pBlitterMural);
-    crServerVBoxBlitterCtxInit(&BltCtx, &cr_server.MainContextInfo);
-
-    rc = CrBltInit(&cr_server.RecorderBlitter, &BltCtx, true, true, NULL, &cr_server.TmpCtxDispatch);
-    if (!RT_SUCCESS(rc))
-    {
-        crWarning("CrBltInit failed rc %d", rc);
-        return rc;
-    }
-
-    rc = CrBltMuralSetCurrent(&cr_server.RecorderBlitter, &BltWin);
-    if (!RT_SUCCESS(rc))
-    {
-        crWarning("CrBltMuralSetCurrent failed rc %d", rc);
-        return rc;
+    if (!CrBltIsInitialized(&cr_server.RecorderBlitter))
+    {
+        pBlitterMural = crServerGetDummyMural(cr_server.MainContextInfo.CreateInfo.visualBits);
+        if (!pBlitterMural)
+        {
+            crWarning("crServerGetDummyMural failed");
+            return VERR_GENERAL_FAILURE;
+        }
+
+        crServerVBoxBlitterWinInit(&BltWin, pBlitterMural);
+        crServerVBoxBlitterCtxInit(&BltCtx, &cr_server.MainContextInfo);
+
+        rc = CrBltInit(&cr_server.RecorderBlitter, &BltCtx, true, true, NULL, &cr_server.TmpCtxDispatch);
+        if (!RT_SUCCESS(rc))
+        {
+            crWarning("CrBltInit failed rc %d", rc);
+            return rc;
+        }
+
+        rc = CrBltMuralSetCurrent(&cr_server.RecorderBlitter, &BltWin);
+        if (!RT_SUCCESS(rc))
+        {
+            crWarning("CrBltMuralSetCurrent failed rc %d", rc);
+            return rc;
+        }
     }
 
@@ -1468,6 +1493,12 @@
     cr_server.pDumper = &cr_server.DbgPrintDumper.Base;
 #else
-    crDmpHtmlInit(&cr_server.HtmlDumper, "S:\\projects\\virtualbox\\3d\\dumps\\1", "index.html");
-    cr_server.pDumper = &cr_server.HtmlDumper.Base;
+    if (!crDmpHtmlIsInited(&cr_server.HtmlDumper))
+    {
+        static int cCounter = 0;
+//    crDmpHtmlInit(&cr_server.HtmlDumper, "S:\\projects\\virtualbox\\3d\\dumps\\1", "index.html");
+        crDmpHtmlInitF(&cr_server.HtmlDumper, "/Users/oracle-mac/vbox/dump/1", "index%d.html", cCounter);
+        cr_server.pDumper = &cr_server.HtmlDumper.Base;
+        ++cCounter;
+    }
 #endif
 
@@ -1630,8 +1661,45 @@
 void crServerDumpFilterOpLeave(unsigned long event, CR_DUMPER *pDumper)
 {
+    if (CR_SERVER_DUMP_F_DRAW_LEAVE_ALL & event)
+    {
+        g_CrDbgDumpDumpOnCountPerform = 0;
+    }
 }
 
 bool crServerDumpFilterOpEnter(unsigned long event, CR_DUMPER *pDumper)
 {
+    if ((CR_SERVER_DUMP_F_SWAPBUFFERS_ENTER & event)
+            || (CR_SERVER_DUMP_F_TEXPRESENT & event))
+    {
+        if (g_CrDbgDumpDumpOnCountEnabled == 1)
+            g_CrDbgDumpDumpOnCountEnabled = 2;
+        else if (g_CrDbgDumpDumpOnCountEnabled)
+        {
+            g_CrDbgDumpDumpOnCountEnabled = 0;
+            if (cr_server.pDumper == &cr_server.HtmlDumper.Base)
+            {
+                crDmpHtmlTerm(&cr_server.HtmlDumper);
+                cr_server.pDumper = NULL;
+            }
+        }
+
+        g_CrDbgDumpDrawCount = 0;
+    }
+    else if (CR_SERVER_DUMP_F_DRAW_ENTER_ALL & event)
+    {
+        if (g_CrDbgDumpDumpOnCountEnabled == 2)
+        {
+            if (g_CrDbgDumpDumpOnCount == g_CrDbgDumpDrawCount)
+            {
+                g_CrDbgDumpDumpOnCountPerform = 1;
+            }
+            ++g_CrDbgDumpDrawCount;
+        }
+    }
+    if (g_CrDbgDumpDumpOnCountPerform)
+    {
+        if (g_CrDbgDumpDrawFlags & event)
+            return true;
+    }
     return CR_SERVER_DUMP_DEFAULT_FILTER_OP(event);
 }
@@ -1639,4 +1707,9 @@
 bool crServerDumpFilterDmp(unsigned long event, CR_DUMPER *pDumper)
 {
+    if (g_CrDbgDumpDumpOnCountPerform)
+    {
+        if (g_CrDbgDumpDrawFlags & event)
+            return true;
+    }
     return CR_SERVER_DUMP_DEFAULT_FILTER_DMP(event);
 }
@@ -1673,3 +1746,137 @@
 }
 #endif
-/* */
+
+GLvoid crServerSpriteCoordReplEnable(GLboolean fEnable)
+{
+    CRContext *g = crStateGetCurrent();
+    CRTextureState *t = &(g->texture);
+    GLuint curTextureUnit = t->curTextureUnit;
+    GLuint curTextureUnitRestore = curTextureUnit;
+    GLuint i;
+
+    for (i = 0; i < g->limits.maxTextureUnits; ++i)
+    {
+        if (g->point.coordReplacement[i])
+        {
+            if (i != curTextureUnit)
+            {
+                curTextureUnit = i;
+                cr_server.head_spu->dispatch_table.ActiveTextureARB( i + GL_TEXTURE0_ARB );
+            }
+
+            cr_server.head_spu->dispatch_table.TexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, (GLint)fEnable);
+        }
+    }
+
+    if (curTextureUnit != curTextureUnitRestore)
+    {
+        cr_server.head_spu->dispatch_table.ActiveTextureARB( curTextureUnitRestore + GL_TEXTURE0_ARB );
+    }
+}
+
+GLvoid SERVER_DISPATCH_APIENTRY crServerDispatchDrawArrays(GLenum mode, GLint first, GLsizei count)
+{
+#ifdef DEBUG
+    GLenum status = cr_server.head_spu->dispatch_table.CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT);
+    Assert(GL_FRAMEBUFFER_COMPLETE == status);
+#endif
+    if (mode == GL_POINTS)
+        crServerSpriteCoordReplEnable(GL_TRUE);
+    CR_SERVER_DUMP_DRAW_ENTER();
+    CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.DrawArrays(mode, first, count););
+    CR_SERVER_DUMP_DRAW_LEAVE();
+    if (mode == GL_POINTS)
+        crServerSpriteCoordReplEnable(GL_FALSE);
+}
+
+GLvoid SERVER_DISPATCH_APIENTRY crServerDispatchDrawElements(GLenum mode,  GLsizei count,  GLenum type,  const GLvoid * indices)
+{
+#ifdef DEBUG
+    GLenum status = cr_server.head_spu->dispatch_table.CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT);
+    Assert(GL_FRAMEBUFFER_COMPLETE == status);
+#endif
+    if (mode == GL_POINTS)
+        crServerSpriteCoordReplEnable(GL_TRUE);
+    CR_SERVER_DUMP_DRAW_ENTER();
+    CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.DrawElements(mode, count, type, indices););
+    CR_SERVER_DUMP_DRAW_LEAVE();
+    if (mode == GL_POINTS)
+        crServerSpriteCoordReplEnable(GL_FALSE);
+}
+
+void SERVER_DISPATCH_APIENTRY crServerDispatchEnd( void )
+{
+    CRContext *g = crStateGetCurrent();
+    GLenum mode = g->current.mode;
+
+    crStateEnd();
+    cr_server.head_spu->dispatch_table.End();
+
+    CR_SERVER_DUMP_DRAW_LEAVE();
+
+    if (mode == GL_POINTS)
+        crServerSpriteCoordReplEnable(GL_FALSE);
+}
+
+#ifdef DEBUG
+extern GLuint g_VBoxTstNumVa;
+#endif
+
+void SERVER_DISPATCH_APIENTRY crServerDispatchBegin(GLenum mode)
+{
+#ifdef DEBUG
+    CRContext *ctx = crStateGetCurrent();
+    SPUDispatchTable *gl = &cr_server.head_spu->dispatch_table;
+
+    g_VBoxTstNumVa = 0;
+
+    if (ctx->program.vpProgramBinding)
+    {
+        AssertRelease(ctx->program.currentVertexProgram);
+
+        if (ctx->program.currentVertexProgram->isARBprogram)
+        {
+            GLint pid=-1;
+            gl->GetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_BINDING_ARB, &pid);
+
+            if (pid != ctx->program.currentVertexProgram->id)
+            {
+                crWarning("pid(%d) != ctx->program.currentVertexProgram->id(%d)", pid, ctx->program.currentVertexProgram->id);
+            }
+            AssertRelease(pid == ctx->program.currentVertexProgram->id);
+        }
+        else
+        {
+            GLint pid=-1;
+
+            gl->GetIntegerv(GL_VERTEX_PROGRAM_BINDING_NV, &pid);
+            if (pid != ctx->program.currentVertexProgram->id)
+            {
+                crWarning("pid(%d) != ctx->program.currentVertexProgram->id(%d)", pid, ctx->program.currentVertexProgram->id);
+            }
+            AssertRelease(pid == ctx->program.currentVertexProgram->id);
+        }
+    }
+    else if (ctx->glsl.activeProgram)
+    {
+        GLint pid=-1;
+
+        gl->GetIntegerv(GL_CURRENT_PROGRAM, &pid);
+        crDebug("pid %i, state: id %i, hwid %i", pid, ctx->glsl.activeProgram->id, ctx->glsl.activeProgram->hwid);
+        if (pid != ctx->glsl.activeProgram->hwid)
+        {
+            crWarning("pid(%d) != ctx->glsl.activeProgram->hwid(%d)", pid, ctx->glsl.activeProgram->hwid);
+        }
+        AssertRelease(pid == ctx->glsl.activeProgram->hwid);
+    }
+#endif
+
+    if (mode == GL_POINTS)
+        crServerSpriteCoordReplEnable(GL_TRUE);
+
+    CR_SERVER_DUMP_DRAW_ENTER();
+
+    crStateBegin(mode);
+    cr_server.head_spu->dispatch_table.Begin(mode);
+}
+
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_special
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_special	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_special	(revision 50041)
@@ -254,2 +254,12 @@
 GetProgramiv
 GetShaderiv
+Begin
+DrawArrays
+DrawElements
+End
+TexEnvf
+TexEnvfv
+TexEnvi
+TexEnviv
+GetTexEnvfv
+GetTexEnviv
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c	(revision 50041)
@@ -137,2 +137,55 @@
     (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels),
     (target, level, internalFormat, width, height, depth, border, format, type, realptr), pixels)
+
+
+void SERVER_DISPATCH_APIENTRY crServerDispatchTexEnvf( GLenum target, GLenum pname, GLfloat param )
+{
+    crStateTexEnvf( target, pname, param );
+    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
+        CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnvf( target, pname, param ););
+}
+
+void SERVER_DISPATCH_APIENTRY crServerDispatchTexEnvfv( GLenum target, GLenum pname, const GLfloat * params )
+{
+    crStateTexEnvfv( target, pname, params );
+    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
+        CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnvfv( target, pname, params ););
+}
+
+void SERVER_DISPATCH_APIENTRY crServerDispatchTexEnvi( GLenum target, GLenum pname, GLint param )
+{
+    crStateTexEnvi( target, pname, param );
+    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
+        CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnvi( target, pname, param ););
+}
+
+void SERVER_DISPATCH_APIENTRY crServerDispatchTexEnviv( GLenum target, GLenum pname, const GLint * params )
+{
+    crStateTexEnviv( target, pname, params );
+    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
+        CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnviv( target, pname, params ););
+}
+
+void SERVER_DISPATCH_APIENTRY crServerDispatchGetTexEnvfv( GLenum target, GLenum pname, GLfloat * params )
+{
+    GLfloat local_params[4];
+    (void) params;
+    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
+        cr_server.head_spu->dispatch_table.GetTexEnvfv( target, pname, local_params );
+    else
+        crStateGetTexEnvfv( target, pname, local_params );
+
+    crServerReturnValue( &(local_params[0]), crStateHlpComponentsCount(pname)*sizeof (GLfloat) );
+}
+
+void SERVER_DISPATCH_APIENTRY crServerDispatchGetTexEnviv( GLenum target, GLenum pname, GLint * params )
+{
+    GLint local_params[4];
+    (void) params;
+    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
+        cr_server.head_spu->dispatch_table.GetTexEnviv( target, pname, local_params );
+    else
+        crStateGetTexEnviv( target, pname, local_params );
+
+    crServerReturnValue( &(local_params[0]), crStateHlpComponentsCount(pname)*sizeof (GLint) );
+}
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.c	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.c	(revision 50041)
@@ -1816,5 +1816,4 @@
     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 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.h	(revision 50041)
@@ -210,4 +210,13 @@
 #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
+
 /**
  * Renderspu state info
@@ -311,4 +320,11 @@
 #ifdef RT_OS_DARWIN
 # ifdef VBOX_WITH_COCOA_QT
+    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;
 # else
@@ -391,4 +407,5 @@
 extern void renderspu_SystemReparentWindow(WindowInfo *window);
 extern void renderspu_SystemVBoxPresentComposition( WindowInfo *window, 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[] );
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c	(revision 50041)
@@ -22,4 +22,7 @@
 #include <iprt/path.h>
 
+#include <cr_string.h>
+#include <cr_mem.h>
+
 GLboolean renderspu_SystemInitVisual(VisualInfo *pVisInfo)
 {
@@ -197,4 +200,21 @@
     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;
 }
 
@@ -290,2 +310,177 @@
     }
 }
+
+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_glx.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_glx.c	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_glx.c	(revision 50041)
@@ -2080,2 +2080,7 @@
 
 }
+
+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 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c	(revision 50041)
@@ -374,4 +374,6 @@
     render_spu.gather_conns = NULL;
 
+    numFuncs = renderspu_SystemPostprocessFunctions(_cr_render_table, numFuncs, RT_ELEMENTS(_cr_render_table));
+
     crDebug("Render SPU: ---------- End of Init -------------");
 
Index: /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c	(revision 50041)
@@ -1688,2 +1688,7 @@
 
 }
+
+uint32_t renderspu_SystemPostprocessFunctions(SPUNamedFunctionTable *aFunctions, uint32_t cFunctions, uint32_t cTable)
+{
+    return cFunctions;
+}
Index: /trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_shaders.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_shaders.c	(revision 50040)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_shaders.c	(revision 50041)
@@ -40,6 +40,6 @@
     GLint hasNonLocalLen = READ_DATA(16, GLsizei);
     GLint *pLocalLength = DATA_POINTER(20, GLint);
-    const char **ppStrings = NULL;
-    GLsizei i;
+    char **ppStrings = NULL;
+    GLsizei i, j, jUpTo;
     int pos=20+count*sizeof(*pLocalLength);
 
@@ -61,7 +61,22 @@
             pLocalLength[i] -= 1;
         }
+
+        Assert(pLocalLength[i] > 0);
+        jUpTo = i == count -1 ? pLocalLength[i] - 1 : pLocalLength[i];
+        for (j = 0; j < jUpTo; ++j)
+        {
+            char *pString = ppStrings[i];
+
+            if (pString[j] == '\0')
+            {
+                Assert(j == jUpTo - 1);
+                pString[j] = '\n';
+            }
+        }
     }
 
-    cr_unpackDispatch.ShaderSource(shader, count, ppStrings, length ? length : pLocalLength);
+//    cr_unpackDispatch.ShaderSource(shader, count, ppStrings, length ? length : pLocalLength);
+    cr_unpackDispatch.ShaderSource(shader, 1, ppStrings, 0);
+
     crFree(ppStrings);
 }
@@ -250,5 +265,5 @@
 void crUnpackExtendGetAttachedObjectsARB(void)
 {
-	GLhandleARB containerObj = READ_DATA(8, GLhandleARB);
+	VBoxGLhandleARB containerObj = READ_DATA(8, VBoxGLhandleARB);
 	GLsizei maxCount = READ_DATA(12, GLsizei);
 	SET_RETURN_PTR(16);
@@ -259,5 +274,5 @@
 void crUnpackExtendGetInfoLogARB(void)
 {
-	GLhandleARB obj = READ_DATA(8, GLhandleARB);
+	VBoxGLhandleARB obj = READ_DATA(8, VBoxGLhandleARB);
 	GLsizei maxLength = READ_DATA(12, GLsizei);
 	SET_RETURN_PTR(16);
