If pixelFormatDefined, change masks and offsets for all visuals; not
just the rootVisual. This fixes several OpenGL problems in depth 16.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@296 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/xc/programs/Xserver/vnc/Xvnc/xvnc.cc b/xc/programs/Xserver/vnc/Xvnc/xvnc.cc
index 5688eaf..e5e9290 100644
--- a/xc/programs/Xserver/vnc/Xvnc/xvnc.cc
+++ b/xc/programs/Xserver/vnc/Xvnc/xvnc.cc
@@ -1124,24 +1124,24 @@
     }
     
     if (pvfb->pixelFormatDefined) {
-	VisualPtr vis;
-	for (vis = pScreen->visuals; vis->vid != pScreen->rootVisual; vis++)
-	    ;
-	
-	if (pvfb->rgbNotBgr) {
-	    vis->offsetBlue = 0;
-	    vis->blueMask = (1 << pvfb->blueBits) - 1;
-	    vis->offsetGreen = pvfb->blueBits;
-	    vis->greenMask = ((1 << pvfb->greenBits) - 1) << vis->offsetGreen;
-	    vis->offsetRed = vis->offsetGreen + pvfb->greenBits;
-	    vis->redMask = ((1 << pvfb->redBits) - 1) << vis->offsetRed;
-	} else {
-	    vis->offsetRed = 0;
-	    vis->redMask = (1 << pvfb->redBits) - 1;
-	    vis->offsetGreen = pvfb->redBits;
-	    vis->greenMask = ((1 << pvfb->greenBits) - 1) << vis->offsetGreen;
-	    vis->offsetBlue = vis->offsetGreen + pvfb->greenBits;
-	    vis->blueMask = ((1 << pvfb->blueBits) - 1) << vis->offsetBlue;
+	VisualPtr vis = pScreen->visuals;
+	for (int i = 0; i < pScreen->numVisuals; i++) {
+	    if (pvfb->rgbNotBgr) {
+		vis->offsetBlue = 0;
+		vis->blueMask = (1 << pvfb->blueBits) - 1;
+		vis->offsetGreen = pvfb->blueBits;
+		vis->greenMask = ((1 << pvfb->greenBits) - 1) << vis->offsetGreen;
+		vis->offsetRed = vis->offsetGreen + pvfb->greenBits;
+		vis->redMask = ((1 << pvfb->redBits) - 1) << vis->offsetRed;
+	    } else {
+		vis->offsetRed = 0;
+		vis->redMask = (1 << pvfb->redBits) - 1;
+		vis->offsetGreen = pvfb->redBits;
+		vis->greenMask = ((1 << pvfb->greenBits) - 1) << vis->offsetGreen;
+		vis->offsetBlue = vis->offsetGreen + pvfb->greenBits;
+		vis->blueMask = ((1 << pvfb->blueBits) - 1) << vis->offsetBlue;
+	    }
+	    vis++;
 	}
     }