Index: Text.cpp
===================================================================
--- Text.cpp	(revision 12982)
+++ Text.cpp	(working copy)
@@ -681,7 +681,7 @@
             else if (pixelSizeVert>getFontHeight())
             {
                 float scale_font = getFontHeight()/pixelSizeVert;
-                matrix.postMultScale(osg::Vec3f(scale_font, scale_font,1.0f));
+                matrix.postMultScale(osg::Vec3f(scale_font, scale_font,scale_font));//1.0f));
             }
 
         }
@@ -1316,9 +1316,12 @@
                 /*case STENCIL_BUFFER:
                     break;*/
                 default:
-                    glPushAttrib(GL_POLYGON_OFFSET_FILL);
+                    const osg::PolygonOffset* po = static_cast<const osg::PolygonOffset*>(state.getLastAppliedAttribute(osg::StateAttribute::POLYGONOFFSET));
+                    float factor = po ? po->getFactor() : 0.f;
+                    float units  = po ? po->getUnits()  : 0.f;
+                    glPushAttrib(GL_POLYGON_BIT);
                     glEnable(GL_POLYGON_OFFSET_FILL);
-                    glPolygonOffset(0.1f * osg::PolygonOffset::getFactorMultiplier(), 10.0f * osg::PolygonOffset::getUnitsMultiplier() );
+                    glPolygonOffset((factor + 0.1f) * osg::PolygonOffset::getFactorMultiplier(), (units + 10.0f) * osg::PolygonOffset::getUnitsMultiplier() );
             }
 
             gl.Color4f(colorMultiplier.r()*_textBBColor.r(),colorMultiplier.g()*_textBBColor.g(),colorMultiplier.b()*_textBBColor.b(),colorMultiplier.a()*_textBBColor.a());
@@ -1680,7 +1683,7 @@
     }
 
     // Do I really need to do this for glPolygonOffset?
-    glPushAttrib(GL_POLYGON_OFFSET_FILL);
+    glPushAttrib(GL_POLYGON_BIT);
     glEnable(GL_POLYGON_OFFSET_FILL);
 
     for(TextureGlyphQuadMap::iterator titr=_textureGlyphQuadMap.begin();
@@ -1709,20 +1712,28 @@
         state.disableColorPointer();
         state.Color(_backdropColor.r(),_backdropColor.g(),_backdropColor.b(),_backdropColor.a());
 
+        const osg::PolygonOffset* po = dynamic_cast<const osg::PolygonOffset*>(state.getLastAppliedAttribute(osg::StateAttribute::POLYGONOFFSET));
+        float factor = po ? po->getFactor() : 0.f;
+        float units  = po ? po->getUnits()  : 0.f;
+
         for( ; backdrop_index < max_backdrop_index; backdrop_index++)
         {
             const GlyphQuads::Coords3& transformedBackdropCoords = glyphquad._transformedBackdropCoords[backdrop_index][contextID];
+
             if (!transformedBackdropCoords.empty()) 
             {
                 state.setVertexPointer( 3, GL_FLOAT, 0, &(transformedBackdropCoords.front()));
-                glPolygonOffset(0.1f * osg::PolygonOffset::getFactorMultiplier(),
-                                osg::PolygonOffset::getUnitsMultiplier() * (max_backdrop_index-backdrop_index) );
+
+                glPolygonOffset((factor + 0.1f) * osg::PolygonOffset::getFactorMultiplier(),
+                                osg::PolygonOffset::getUnitsMultiplier() * (units + (max_backdrop_index-backdrop_index)));
+
                 state.drawQuads(0,transformedBackdropCoords.size());
             }
         }
 
         // Reset the polygon offset so the foreground text is on top
-        glPolygonOffset(0.0f,0.0f);
+        if (po) po->apply(state);
+        else glPolygonOffset(factor,units);
 
         drawForegroundText(state, glyphquad, colorMultiplier);
     }
@@ -1867,7 +1878,7 @@
     unsigned int contextID = state.getContextID();
     TextureGlyphQuadMap::iterator titr; // Moved up here for VC6
     
-    glPushAttrib(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_STENCIL_TEST);
+    glPushAttrib(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
 
     // It seems I can get away without calling this here
     //glClear(GL_STENCIL_BUFFER_BIT);
