Ignore:
Timestamp:
Mar 8, 2010, 12:52:58 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.2 sources.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/opengl/qpaintengine_opengl.cpp

    r561 r651  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    109109#endif
    110110
     111#ifdef Q_WS_X11
     112static bool qt_nvidiaFboNeedsFinish = false;
     113#endif
     114
    111115static inline void qt_glColor4ubv(unsigned char *col)
    112116{
     
    424428#ifdef Q_WS_X11
    425429    // workaround for bug in nvidia driver versions 9x.xx
    426     if (QGLExtensions::nvidiaFboNeedsFinish)
     430    if (qt_nvidiaFboNeedsFinish)
    427431        glFinish();
    428432#endif
     
    478482bool QGLOffscreen::isSupported()
    479483{
    480     return (QGLExtensions::glExtensions & QGLExtensions::FramebufferObject); // for fbo
     484    return (QGLExtensions::glExtensions() & QGLExtensions::FramebufferObject); // for fbo
    481485}
    482486
     
    12671271            d->mv_matrix[i][j] = (i == j ? qreal(1) : qreal(0));
    12681272
    1269     bool has_frag_program = (QGLExtensions::glExtensions & QGLExtensions::FragmentProgram)
     1273    bool has_frag_program = (QGLExtensions::glExtensions() & QGLExtensions::FragmentProgram)
    12701274                            && (pdev->devType() != QInternal::Pixmap);
    12711275
     
    12801284
    12811285    d->use_stencil_method = d->device->format().stencil()
    1282                             && (QGLExtensions::glExtensions & QGLExtensions::StencilWrap);
     1286                            && (QGLExtensions::glExtensions() & QGLExtensions::StencilWrap);
    12831287    if (d->device->format().directRendering()
    1284         && (d->use_stencil_method && QGLExtensions::glExtensions & QGLExtensions::StencilTwoSide))
     1288        && (d->use_stencil_method && QGLExtensions::glExtensions() & QGLExtensions::StencilTwoSide))
    12851289        d->has_stencil_face_ext = qt_resolve_stencil_face_extension(ctx);
     1290
     1291#ifdef Q_WS_X11
     1292    static bool nvidia_workaround_needs_init = true;
     1293    if (nvidia_workaround_needs_init) {
     1294        // nvidia 9x.xx unix drivers contain a bug which requires us to
     1295        // call glFinish before releasing an fbo to avoid painting
     1296        // artifacts
     1297        const QByteArray versionString(reinterpret_cast<const char*>(glGetString(GL_VERSION)));
     1298        const int pos = versionString.indexOf("NVIDIA");
     1299        if (pos >= 0) {
     1300            const float nvidiaDriverVersion = versionString.mid(pos + strlen("NVIDIA")).toFloat();
     1301            qt_nvidiaFboNeedsFinish = nvidiaDriverVersion >= 90.0 && nvidiaDriverVersion < 100.0;
     1302        }
     1303        nvidia_workaround_needs_init = false;
     1304    }
     1305#endif
    12861306
    12871307#ifndef QT_OPENGL_ES
     
    13341354        glDisableClientState(GL_VERTEX_ARRAY);
    13351355
    1336         if (QGLExtensions::glExtensions & QGLExtensions::SampleBuffers)
     1356        if (QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers)
    13371357            glDisable(GL_MULTISAMPLE);
    13381358        glDisable(GL_TEXTURE_2D);
    1339         if (QGLExtensions::glExtensions & QGLExtensions::TextureRectangle)
     1359        if (QGLExtensions::glExtensions() & QGLExtensions::TextureRectangle)
    13401360            glDisable(GL_TEXTURE_RECTANGLE_NV);
    13411361        glDisable(GL_STENCIL_TEST);
     
    15351555    Q_UNUSED(brush);
    15361556#else
    1537     bool has_mirrored_repeat = QGLExtensions::glExtensions & QGLExtensions::MirroredRepeat;
     1557    bool has_mirrored_repeat = QGLExtensions::glExtensions() & QGLExtensions::MirroredRepeat;
    15381558    Qt::BrushStyle style = brush.style();
    15391559
     
    20992119    return !(style == Qt::SolidPattern
    21002120             || (style == Qt::LinearGradientPattern
    2101                  && (QGLExtensions::glExtensions & QGLExtensions::MirroredRepeat)));
     2121                 && (QGLExtensions::glExtensions() & QGLExtensions::MirroredRepeat)));
    21022122}
    21032123
     
    24212441        } else {
    24222442            d->high_quality_antialiasing = false;
    2423             if (QGLExtensions::glExtensions & QGLExtensions::SampleBuffers)
     2443            if (QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers)
    24242444                glEnable(GL_MULTISAMPLE);
    24252445        }
    24262446    } else {
    24272447        d->high_quality_antialiasing = false;
    2428         if (QGLExtensions::glExtensions & QGLExtensions::SampleBuffers)
     2448        if (QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers)
    24292449            glDisable(GL_MULTISAMPLE);
    24302450    }
     
    24362456            DEBUG_ONCE_STR("Unable to initialize offscreen, disabling high quality antialiasing");
    24372457            d->high_quality_antialiasing = false;
    2438             if (QGLExtensions::glExtensions & QGLExtensions::SampleBuffers)
     2458            if (QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers)
    24392459                glEnable(GL_MULTISAMPLE);
    24402460        }
     
    24432463    d->has_antialiasing = d->high_quality_antialiasing
    24442464                          || ((hints & QPainter::Antialiasing)
    2445                               && (QGLExtensions::glExtensions & QGLExtensions::SampleBuffers));
     2465                              && (QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers));
    24462466}
    24472467
     
    49324952    glEnableClientState(GL_VERTEX_ARRAY);
    49334953    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    4934     bool antialias = !(ti.fontEngine->fontDef.styleStrategy & QFont::NoAntialias);
     4954    bool antialias = !(ti.fontEngine->fontDef.styleStrategy & QFont::NoAntialias)
     4955                   && (d->matrix.type() > QTransform::TxTranslate);
    49354956    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, antialias ? GL_LINEAR : GL_NEAREST);
    49364957    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, antialias ? GL_LINEAR : GL_NEAREST);
Note: See TracChangeset for help on using the changeset viewer.