diff --git a/src/osgText/Text.cpp b/src/osgText/Text.cpp index abbc559a3..92e18af08 100644 --- a/src/osgText/Text.cpp +++ b/src/osgText/Text.cpp @@ -1091,20 +1091,21 @@ void Text::drawImplementation(osg::State& state, const osg::Vec4& colorMultiplie state.Normal(_normal.x(), _normal.y(), _normal.z()); + state.lazyDisablingOfVertexAttributes(); + + state.setVertexPointer(_coords.get()); + state.setTexCoordPointer( 0, _texcoords.get()); + + state.applyDisablingOfVertexAttributes(); + if ((_drawMode&(~TEXT))!=0) { if (!_decorationPrimitives.empty()) { - state.disableNormalPointer(); - osg::State::ApplyModeProxy applyMode(state, GL_LIGHTING, false); osg::State::ApplyTextureModeProxy applyTextureMode(state, 0, GL_TEXTURE_2D, false); - state.disableAllVertexArrays(); - - state.setVertexPointer(_coords.get()); - #if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE) && !defined(OSG_GL3_AVAILABLE) switch(_backdropImplementation) { @@ -1165,8 +1166,6 @@ void Text::drawImplementation(osg::State& state, const osg::Vec4& colorMultiplie if (_drawMode & TEXT) { - state.disableAllVertexArrays(); - // Okay, since ATI's cards/drivers are not working correctly, // we need alternative solutions to glPolygonOffset. // So this is a pick your poison approach. Each alternative @@ -1322,16 +1321,12 @@ float Text::bilinearInterpolate(float x1, float x2, float y1, float y2, float x, void Text::drawForegroundText(osg::State& state, const GlyphQuads& glyphquad, const osg::Vec4& colorMultiplier) const { const Coords& coords = _coords; - const TexCoords& texcoords = _texcoords; const ColorCoords& colors = _colorCoords; bool usingVertexBufferObjects = state.useVertexBufferObject(_supportsVertexBufferObjects && _useVertexBufferObjects); if (coords.valid() && !coords->empty()) { - state.setVertexPointer(coords.get()); - state.setTexCoordPointer(0, texcoords.get()); - if(_colorGradientMode == SOLID) { state.disableColorPointer(); @@ -1391,9 +1386,6 @@ void Text::renderWithDelayedDepthWrites(osg::State& state, const osg::Vec4& colo void Text::drawTextWithBackdrop(osg::State& state, const osg::Vec4& colorMultiplier) const { - state.setVertexPointer(_coords.get()); - state.setTexCoordPointer( 0, _texcoords.get()); - bool usingVertexBufferObjects = state.useVertexBufferObject(_supportsVertexBufferObjects && _useVertexBufferObjects); for(TextureGlyphQuadMap::const_iterator titr=_textureGlyphQuadMap.begin(); @@ -1447,9 +1439,6 @@ void Text::renderWithPolygonOffset(osg::State& state, const osg::Vec4& colorMult osg::PolygonOffset::setFactorAndUnitsMultipliersUsingBestGuessForDriver(); } - state.setVertexPointer(_coords.get()); - state.setTexCoordPointer( 0, _texcoords.get()); - // Do I really need to do this for glPolygonOffset? glPushAttrib(GL_POLYGON_OFFSET_FILL); glEnable(GL_POLYGON_OFFSET_FILL); @@ -1509,9 +1498,6 @@ void Text::renderWithNoDepthBuffer(osg::State& state, const osg::Vec4& colorMult glPushAttrib(GL_DEPTH_BUFFER_BIT); glDisable(GL_DEPTH_TEST); - state.setVertexPointer(_coords.get()); - state.setTexCoordPointer( 0, _texcoords.get()); - for(TextureGlyphQuadMap::const_iterator titr=_textureGlyphQuadMap.begin(); titr!=_textureGlyphQuadMap.end(); ++titr) @@ -1566,9 +1552,6 @@ void Text::renderWithDepthRange(osg::State& state, const osg::Vec4& colorMultipl // glPushAttrib(GL_VIEWPORT_BIT); glPushAttrib(GL_DEPTH_BUFFER_BIT); - state.setVertexPointer(_coords.get()); - state.setTexCoordPointer( 0, _texcoords.get()); - for(TextureGlyphQuadMap::const_iterator titr=_textureGlyphQuadMap.begin(); titr!=_textureGlyphQuadMap.end(); ++titr) @@ -1659,9 +1642,6 @@ void Text::renderWithStencilBuffer(osg::State& state, const osg::Vec4& colorMult // Arrrgh! Why does the code only seem to work correctly if I call this? glDepthMask(GL_FALSE); - state.setVertexPointer(_coords.get()); - state.setTexCoordPointer( 0, _texcoords.get()); - // Draw all the text to the stencil buffer to mark out the region // that we can write too. @@ -1719,9 +1699,6 @@ void Text::renderWithStencilBuffer(osg::State& state, const osg::Vec4& colorMult // Re-enable writing to the color buffer so we can see the results glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - state.setVertexPointer(_coords.get()); - state.setTexCoordPointer( 0, _texcoords.get()); - // Draw all the text again for(TextureGlyphQuadMap::const_iterator titr=_textureGlyphQuadMap.begin(); diff --git a/src/osgText/Text3D.cpp b/src/osgText/Text3D.cpp index d5d749a9f..719f91f6a 100644 --- a/src/osgText/Text3D.cpp +++ b/src/osgText/Text3D.cpp @@ -499,7 +499,13 @@ void Text3D::drawImplementation(osg::RenderInfo& renderInfo) const // OSG_NOTICE<<"No need to apply matrix "<draw(state, usingVertexBufferObjects);