Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_server.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_server.h	(revision 35968)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_server.h	(revision 35969)
@@ -228,4 +228,6 @@
 
     PFNCRSERVERPRESENTFBO pfnPresentFBO;
+    GLboolean             bForceOffscreenRendering; /*Force server to render 3d data offscreen
+                                                     *using callback above to update vbox framebuffers*/
 } CRServer;
 
@@ -258,4 +260,6 @@
 extern DECLEXPORT(void) crVBoxServerSetPresentFBOCB(PFNCRSERVERPRESENTFBO pfnPresentFBO);
 
+extern DECLEXPORT(int32_t) crVBoxServerSetOffscreenRendering(GLboolean value);
+
 #ifdef __cplusplus
 }
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp	(revision 35968)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp	(revision 35969)
@@ -1241,4 +1241,6 @@
 
                     g_pConsole = pConsole;
+
+                    /*rc = crVBoxServerSetOffscreenRendering(GL_TRUE);*/
                     rc = VINF_SUCCESS;
                 }
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c	(revision 35968)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c	(revision 35969)
@@ -56,4 +56,5 @@
 
     cr_server.screenCount = 0;
+    cr_server.bForceOffscreenRendering = GL_FALSE;
 }
 
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c	(revision 35968)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c	(revision 35969)
@@ -1235,2 +1235,21 @@
     cr_server.pfnPresentFBO = pfnPresentFBO;
 }
+
+DECLEXPORT(int32_t) crVBoxServerSetOffscreenRendering(GLboolean value)
+{
+    if (cr_server.bForceOffscreenRendering==value)
+    {
+        return VINF_SUCCESS;
+    }
+
+    if (value && !crServerSupportRedirMuralFBO())
+    {
+        return VERR_NOT_SUPPORTED;
+    }
+
+    cr_server.bForceOffscreenRendering=value;
+
+    crHashtableWalk(cr_server.muralTable, crVBoxServerCheckMuralCB, NULL);
+
+    return VINF_SUCCESS;
+}
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.c	(revision 35968)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.c	(revision 35969)
@@ -51,5 +51,5 @@
     int overlappingScreenCount, primaryS, i;
 
-    if (cr_server.screenCount<2)
+    if (cr_server.screenCount<2 && !cr_server.bForceOffscreenRendering)
     {
         CRASSERT(cr_server.screenCount>0);
@@ -105,5 +105,5 @@
     mural->hY = mural->gY-cr_server.screen[primaryS].y;
 
-    if (overlappingScreenCount<2)
+    if (overlappingScreenCount<2 && !cr_server.bForceOffscreenRendering)
     {
         if (mural->bUseFBO)
