Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/gui/egl/qeglproperties.cpp

    r769 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    4444
    4545#include "qeglproperties_p.h"
     46#include "qeglcontext_p.h"
    4647
    4748QT_BEGIN_NAMESPACE
    48 
    49 #include "qegl_p.h"
    50 
    5149
    5250// Initialize a property block.
     
    6159    for (int name = 0x3020; name <= 0x304F; ++name) {
    6260        EGLint value;
    63         if (name != EGL_NONE && eglGetConfigAttrib(QEglContext::display(), cfg, name, &value))
     61        if (name != EGL_NONE && eglGetConfigAttrib(QEgl::display(), cfg, name, &value))
    6462            setValue(name, value);
    6563    }
     
    8381    case EGL_BLUE_SIZE: return 0;
    8482    case EGL_ALPHA_SIZE: return 0;
    85 #if defined(EGL_LUMINANCE_SIZE)
     83#ifdef EGL_LUMINANCE_SIZE
    8684    case EGL_LUMINANCE_SIZE: return 0;
    8785#endif
    88 #if defined(EGL_ALPHA_MASK_SIZE)
     86#ifdef EGL_ALPHA_MASK_SIZE
    8987    case EGL_ALPHA_MASK_SIZE: return 0;
    9088#endif
    91 #if defined(EGL_BIND_TO_TEXTURE_RGB)
     89#ifdef EGL_BIND_TO_TEXTURE_RGB
    9290    case EGL_BIND_TO_TEXTURE_RGB: return EGL_DONT_CARE;
    9391#endif
    94 #if defined(EGL_BIND_TO_TEXTURE_RGBA)
     92#ifdef EGL_BIND_TO_TEXTURE_RGBA
    9593    case EGL_BIND_TO_TEXTURE_RGBA: return EGL_DONT_CARE;
    9694#endif
    97 #if defined(EGL_COLOR_BUFFER_TYPE)
     95#ifdef EGL_COLOR_BUFFER_TYPE
    9896    case EGL_COLOR_BUFFER_TYPE: return EGL_RGB_BUFFER;
    9997#endif
     
    106104    case EGL_MAX_SWAP_INTERVAL: return EGL_DONT_CARE;
    107105    case EGL_MIN_SWAP_INTERVAL: return EGL_DONT_CARE;
    108 #if defined(EGL_RENDERABLE_TYPE)
     106#ifdef EGL_RENDERABLE_TYPE
    109107    case EGL_RENDERABLE_TYPE: return EGL_OPENGL_ES_BIT;
    110108#endif
     
    118116    case EGL_TRANSPARENT_BLUE_VALUE: return EGL_DONT_CARE;
    119117
    120 #if defined(EGL_VERSION_1_3)
     118#ifdef EGL_VERSION_1_3
    121119    case EGL_CONFORMANT: return 0;
    122120    case EGL_MATCH_NATIVE_PIXMAP: return EGL_NONE;
     
    166164    return false;
    167165}
     166
     167void QEglProperties::setDeviceType(int devType)
     168{
     169    if (devType == QInternal::Pixmap || devType == QInternal::Image)
     170        setValue(EGL_SURFACE_TYPE, EGL_PIXMAP_BIT);
     171    else if (devType == QInternal::Pbuffer)
     172        setValue(EGL_SURFACE_TYPE, EGL_PBUFFER_BIT);
     173    else
     174        setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT);
     175}
     176
    168177
    169178// Sets the red, green, blue, and alpha sizes based on a pixel format.
     
    207216void QEglProperties::setRenderableType(QEgl::API api)
    208217{
    209 #if defined(EGL_RENDERABLE_TYPE)
     218#ifdef EGL_RENDERABLE_TYPE
    210219#if defined(QT_OPENGL_ES_2)
    211220    if (api == QEgl::OpenGL)
     
    214223    if (api == QEgl::OpenGL)
    215224        setValue(EGL_RENDERABLE_TYPE, EGL_OPENGL_ES_BIT);
    216 #endif
    217 #if defined(EGL_OPENVG_BIT)
     225#elif defined(EGL_OPENGL_BIT)
     226    if (api == QEgl::OpenGL)
     227        setValue(EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT);
     228#endif
     229#ifdef EGL_OPENVG_BIT
    218230    if (api == QEgl::OpenVG)
    219231        setValue(EGL_RENDERABLE_TYPE, EGL_OPENVG_BIT);
     
    230242bool QEglProperties::reduceConfiguration()
    231243{
     244#ifdef EGL_SWAP_BEHAVIOR
     245    if (value(EGL_SWAP_BEHAVIOR) != EGL_DONT_CARE)
     246        removeValue(EGL_SWAP_BEHAVIOR);
     247#endif
     248
     249#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT
     250    // For OpenVG, we sometimes try to create a surface using a pre-multiplied format. If we can't
     251    // find a config which supports pre-multiplied formats, remove the flag on the surface type:
     252    EGLint surfaceType = value(EGL_SURFACE_TYPE);
     253    if (surfaceType & EGL_VG_ALPHA_FORMAT_PRE_BIT) {
     254        surfaceType ^= EGL_VG_ALPHA_FORMAT_PRE_BIT;
     255        setValue(EGL_SURFACE_TYPE, surfaceType);
     256        return true;
     257    }
     258#endif
    232259    // EGL chooses configs with the highest color depth over
    233260    // those with smaller (but faster) lower color depths. One
    234261    // way around this is to set EGL_BUFFER_SIZE to 16, which
    235262    // trumps the others. Of course, there may not be a 16-bit
    236     // config avaliable, so it's the first restraint we remove.
     263    // config available, so it's the first restraint we remove.
    237264    if (value(EGL_BUFFER_SIZE) == 16) {
    238265        removeValue(EGL_BUFFER_SIZE);
     
    254281    if (removeValue(EGL_DEPTH_SIZE))
    255282        return true;
    256 #if defined(EGL_BIND_TO_TEXTURE_RGB)
     283#ifdef EGL_BIND_TO_TEXTURE_RGB
    257284    if (removeValue(EGL_BIND_TO_TEXTURE_RGB))
    258285        return true;
     
    269296        str += QLatin1String("\n   ");
    270297    str += tag;
    271 }
    272 
    273 void QEglProperties::dumpAllConfigs()
    274 {
    275     EGLint count = 0;
    276     eglGetConfigs(QEglContext::display(), 0, 0, &count);
    277     if (count < 1)
    278         return;
    279 
    280     EGLConfig *configs = new EGLConfig [count];
    281     eglGetConfigs(QEglContext::display(), configs, count, &count);
    282     for (EGLint index = 0; index < count; ++index)
    283         qWarning() << QEglProperties(configs[index]).toString();
    284     delete [] configs;
    285298}
    286299
     
    308321        if ((val & EGL_OPENGL_ES2_BIT) != 0)
    309322            types += QLatin1String("es2");
     323#endif
     324#ifdef EGL_OPENGL_BIT
     325        if ((val & EGL_OPENGL_BIT) != 0)
     326            types += QLatin1String("gl");
    310327#endif
    311328        if ((val & EGL_OPENVG_BIT) != 0)
Note: See TracChangeset for help on using the changeset viewer.