| Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/platformsupport/eglconvenience/qeglconvenience.cpp |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||||||||
| 2 | - | |||||||||||||||||||
| 3 | - | |||||||||||||||||||
| 4 | - | |||||||||||||||||||
| 5 | - | |||||||||||||||||||
| 6 | - | |||||||||||||||||||
| 7 | - | |||||||||||||||||||
| 8 | - | |||||||||||||||||||
| 9 | - | |||||||||||||||||||
| 10 | - | |||||||||||||||||||
| 11 | - | |||||||||||||||||||
| 12 | QVector<EGLint> q_createConfigAttributesFromFormat(const QSurfaceFormat &format) | - | ||||||||||||||||||
| 13 | { | - | ||||||||||||||||||
| 14 | int redSize = format.redBufferSize(); | - | ||||||||||||||||||
| 15 | int greenSize = format.greenBufferSize(); | - | ||||||||||||||||||
| 16 | int blueSize = format.blueBufferSize(); | - | ||||||||||||||||||
| 17 | int alphaSize = format.alphaBufferSize(); | - | ||||||||||||||||||
| 18 | int depthSize = format.depthBufferSize(); | - | ||||||||||||||||||
| 19 | int stencilSize = format.stencilBufferSize(); | - | ||||||||||||||||||
| 20 | int sampleCount = format.samples(); | - | ||||||||||||||||||
| 21 | - | |||||||||||||||||||
| 22 | QVector<EGLint> configAttributes; | - | ||||||||||||||||||
| 23 | configAttributes.append(0x3024); | - | ||||||||||||||||||
| 24 | configAttributes.append(redSize > 0 ? redSize : 0); | - | ||||||||||||||||||
| 25 | - | |||||||||||||||||||
| 26 | configAttributes.append(0x3023); | - | ||||||||||||||||||
| 27 | configAttributes.append(greenSize > 0 ? greenSize : 0); | - | ||||||||||||||||||
| 28 | - | |||||||||||||||||||
| 29 | configAttributes.append(0x3022); | - | ||||||||||||||||||
| 30 | configAttributes.append(blueSize > 0 ? blueSize : 0); | - | ||||||||||||||||||
| 31 | - | |||||||||||||||||||
| 32 | configAttributes.append(0x3021); | - | ||||||||||||||||||
| 33 | configAttributes.append(alphaSize > 0 ? alphaSize : 0); | - | ||||||||||||||||||
| 34 | - | |||||||||||||||||||
| 35 | configAttributes.append(0x3025); | - | ||||||||||||||||||
| 36 | configAttributes.append(depthSize > 0 ? depthSize : 0); | - | ||||||||||||||||||
| 37 | - | |||||||||||||||||||
| 38 | configAttributes.append(0x3026); | - | ||||||||||||||||||
| 39 | configAttributes.append(stencilSize > 0 ? stencilSize : 0); | - | ||||||||||||||||||
| 40 | - | |||||||||||||||||||
| 41 | configAttributes.append(0x3031); | - | ||||||||||||||||||
| 42 | configAttributes.append(sampleCount > 0 ? sampleCount : 0); | - | ||||||||||||||||||
| 43 | - | |||||||||||||||||||
| 44 | configAttributes.append(0x3032); | - | ||||||||||||||||||
| 45 | configAttributes.append(sampleCount > 0); | - | ||||||||||||||||||
| 46 | - | |||||||||||||||||||
| 47 | return never executed: configAttributes;return configAttributes;never executed: return configAttributes; | 0 | ||||||||||||||||||
| 48 | } | - | ||||||||||||||||||
| 49 | - | |||||||||||||||||||
| 50 | bool q_reduceConfigAttributes(QVector<EGLint> *configAttributes) | - | ||||||||||||||||||
| 51 | { | - | ||||||||||||||||||
| 52 | int i = -1; | - | ||||||||||||||||||
| 53 | - | |||||||||||||||||||
| 54 | - | |||||||||||||||||||
| 55 | - | |||||||||||||||||||
| 56 | - | |||||||||||||||||||
| 57 | - | |||||||||||||||||||
| 58 | i = configAttributes->indexOf(0x3093); | - | ||||||||||||||||||
| 59 | if (i >= 0
| 0 | ||||||||||||||||||
| 60 | configAttributes->remove(i,2); | - | ||||||||||||||||||
| 61 | } never executed: end of block | 0 | ||||||||||||||||||
| 62 | - | |||||||||||||||||||
| 63 | - | |||||||||||||||||||
| 64 | - | |||||||||||||||||||
| 65 | - | |||||||||||||||||||
| 66 | - | |||||||||||||||||||
| 67 | i = configAttributes->indexOf(0x3033); | - | ||||||||||||||||||
| 68 | if (i >= 0
| 0 | ||||||||||||||||||
| 69 | EGLint surfaceType = configAttributes->at(i +1); | - | ||||||||||||||||||
| 70 | if (surfaceType & 0x0040
| 0 | ||||||||||||||||||
| 71 | surfaceType ^= 0x0040; | - | ||||||||||||||||||
| 72 | configAttributes->replace(i+1,surfaceType); | - | ||||||||||||||||||
| 73 | return never executed: true;return true;never executed: return true; | 0 | ||||||||||||||||||
| 74 | } | - | ||||||||||||||||||
| 75 | } never executed: end of block | 0 | ||||||||||||||||||
| 76 | - | |||||||||||||||||||
| 77 | - | |||||||||||||||||||
| 78 | - | |||||||||||||||||||
| 79 | - | |||||||||||||||||||
| 80 | - | |||||||||||||||||||
| 81 | - | |||||||||||||||||||
| 82 | - | |||||||||||||||||||
| 83 | i = configAttributes->indexOf(0x3020); | - | ||||||||||||||||||
| 84 | if (i >= 0
| 0 | ||||||||||||||||||
| 85 | if (configAttributes->at(i+1) == 16
| 0 | ||||||||||||||||||
| 86 | configAttributes->remove(i,2); | - | ||||||||||||||||||
| 87 | return never executed: true;return true;never executed: return true; | 0 | ||||||||||||||||||
| 88 | } | - | ||||||||||||||||||
| 89 | } never executed: end of block | 0 | ||||||||||||||||||
| 90 | - | |||||||||||||||||||
| 91 | i = configAttributes->indexOf(0x3031); | - | ||||||||||||||||||
| 92 | if (i >= 0
| 0 | ||||||||||||||||||
| 93 | EGLint value = configAttributes->value(i+1, 0); | - | ||||||||||||||||||
| 94 | if (value > 1
| 0 | ||||||||||||||||||
| 95 | configAttributes->replace(i+1, qMin(EGLint(16), value / 2)); never executed: configAttributes->replace(i+1, qMin(EGLint(16), value / 2)); | 0 | ||||||||||||||||||
| 96 | else | - | ||||||||||||||||||
| 97 | configAttributes->remove(i, 2); never executed: configAttributes->remove(i, 2); | 0 | ||||||||||||||||||
| 98 | return never executed: true;return true;never executed: return true; | 0 | ||||||||||||||||||
| 99 | } | - | ||||||||||||||||||
| 100 | - | |||||||||||||||||||
| 101 | i = configAttributes->indexOf(0x3032); | - | ||||||||||||||||||
| 102 | if (i >= 0
| 0 | ||||||||||||||||||
| 103 | configAttributes->remove(i,2); | - | ||||||||||||||||||
| 104 | return never executed: true;return true;never executed: return true; | 0 | ||||||||||||||||||
| 105 | } | - | ||||||||||||||||||
| 106 | - | |||||||||||||||||||
| 107 | i = configAttributes->indexOf(0x3025); | - | ||||||||||||||||||
| 108 | if (i >= 0
| 0 | ||||||||||||||||||
| 109 | if (configAttributes->at(i + 1) >= 32
| 0 | ||||||||||||||||||
| 110 | configAttributes->replace(i + 1, 24); never executed: configAttributes->replace(i + 1, 24); | 0 | ||||||||||||||||||
| 111 | else if (configAttributes->at(i + 1) > 1
| 0 | ||||||||||||||||||
| 112 | configAttributes->replace(i + 1, 1); never executed: configAttributes->replace(i + 1, 1); | 0 | ||||||||||||||||||
| 113 | else | - | ||||||||||||||||||
| 114 | configAttributes->remove(i, 2); never executed: configAttributes->remove(i, 2); | 0 | ||||||||||||||||||
| 115 | return never executed: true;return true;never executed: return true; | 0 | ||||||||||||||||||
| 116 | } | - | ||||||||||||||||||
| 117 | - | |||||||||||||||||||
| 118 | i = configAttributes->indexOf(0x3021); | - | ||||||||||||||||||
| 119 | if (i >= 0
| 0 | ||||||||||||||||||
| 120 | configAttributes->remove(i,2); | - | ||||||||||||||||||
| 121 | - | |||||||||||||||||||
| 122 | i = configAttributes->indexOf(0x303A); | - | ||||||||||||||||||
| 123 | if (i >= 0
| 0 | ||||||||||||||||||
| 124 | configAttributes->replace(i,0x3039); | - | ||||||||||||||||||
| 125 | configAttributes->replace(i+1,true); | - | ||||||||||||||||||
| 126 | - | |||||||||||||||||||
| 127 | } never executed: end of block | 0 | ||||||||||||||||||
| 128 | - | |||||||||||||||||||
| 129 | return never executed: true;return true;never executed: return true; | 0 | ||||||||||||||||||
| 130 | } | - | ||||||||||||||||||
| 131 | - | |||||||||||||||||||
| 132 | i = configAttributes->indexOf(0x3026); | - | ||||||||||||||||||
| 133 | if (i >= 0
| 0 | ||||||||||||||||||
| 134 | if (configAttributes->at(i + 1) > 1
| 0 | ||||||||||||||||||
| 135 | configAttributes->replace(i + 1, 1); never executed: configAttributes->replace(i + 1, 1); | 0 | ||||||||||||||||||
| 136 | else | - | ||||||||||||||||||
| 137 | configAttributes->remove(i, 2); never executed: configAttributes->remove(i, 2); | 0 | ||||||||||||||||||
| 138 | return never executed: true;return true;never executed: return true; | 0 | ||||||||||||||||||
| 139 | } | - | ||||||||||||||||||
| 140 | - | |||||||||||||||||||
| 141 | - | |||||||||||||||||||
| 142 | i = configAttributes->indexOf(0x3039); | - | ||||||||||||||||||
| 143 | if (i >= 0
| 0 | ||||||||||||||||||
| 144 | configAttributes->remove(i,2); | - | ||||||||||||||||||
| 145 | return never executed: true;return true;never executed: return true; | 0 | ||||||||||||||||||
| 146 | } | - | ||||||||||||||||||
| 147 | - | |||||||||||||||||||
| 148 | - | |||||||||||||||||||
| 149 | return never executed: false;return false;never executed: return false; | 0 | ||||||||||||||||||
| 150 | } | - | ||||||||||||||||||
| 151 | - | |||||||||||||||||||
| 152 | QEglConfigChooser::QEglConfigChooser(EGLDisplay display) | - | ||||||||||||||||||
| 153 | : m_display(display) | - | ||||||||||||||||||
| 154 | , m_surfaceType(0x0004) | - | ||||||||||||||||||
| 155 | , m_ignore(false) | - | ||||||||||||||||||
| 156 | , m_confAttrRed(0) | - | ||||||||||||||||||
| 157 | , m_confAttrGreen(0) | - | ||||||||||||||||||
| 158 | , m_confAttrBlue(0) | - | ||||||||||||||||||
| 159 | , m_confAttrAlpha(0) | - | ||||||||||||||||||
| 160 | { | - | ||||||||||||||||||
| 161 | } never executed: end of block | 0 | ||||||||||||||||||
| 162 | - | |||||||||||||||||||
| 163 | QEglConfigChooser::~QEglConfigChooser() | - | ||||||||||||||||||
| 164 | { | - | ||||||||||||||||||
| 165 | } | - | ||||||||||||||||||
| 166 | - | |||||||||||||||||||
| 167 | EGLConfig QEglConfigChooser::chooseConfig() | - | ||||||||||||||||||
| 168 | { | - | ||||||||||||||||||
| 169 | QVector<EGLint> configureAttributes = q_createConfigAttributesFromFormat(m_format); | - | ||||||||||||||||||
| 170 | configureAttributes.append(0x3033); | - | ||||||||||||||||||
| 171 | configureAttributes.append(surfaceType()); | - | ||||||||||||||||||
| 172 | - | |||||||||||||||||||
| 173 | configureAttributes.append(0x3040); | - | ||||||||||||||||||
| 174 | bool needsES2Plus = false; | - | ||||||||||||||||||
| 175 | switch (m_format.renderableType()) { | - | ||||||||||||||||||
| 176 | case never executed: QSurfaceFormat::OpenVG:case QSurfaceFormat::OpenVG:never executed: case QSurfaceFormat::OpenVG: | 0 | ||||||||||||||||||
| 177 | configureAttributes.append(0x0002); | - | ||||||||||||||||||
| 178 | break; never executed: break; | 0 | ||||||||||||||||||
| 179 | - | |||||||||||||||||||
| 180 | case never executed: QSurfaceFormat::DefaultRenderableType:case QSurfaceFormat::DefaultRenderableType:never executed: case QSurfaceFormat::DefaultRenderableType: | 0 | ||||||||||||||||||
| 181 | - | |||||||||||||||||||
| 182 | if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL
| 0 | ||||||||||||||||||
| 183 | configureAttributes.append(0x0008); never executed: configureAttributes.append(0x0008); | 0 | ||||||||||||||||||
| 184 | else | - | ||||||||||||||||||
| 185 | - | |||||||||||||||||||
| 186 | needsES2Plus = true; never executed: needsES2Plus = true; | 0 | ||||||||||||||||||
| 187 | break; never executed: break; | 0 | ||||||||||||||||||
| 188 | case never executed: QSurfaceFormat::OpenGL:case QSurfaceFormat::OpenGL:never executed: case QSurfaceFormat::OpenGL: | 0 | ||||||||||||||||||
| 189 | configureAttributes.append(0x0008); | - | ||||||||||||||||||
| 190 | break; never executed: break; | 0 | ||||||||||||||||||
| 191 | - | |||||||||||||||||||
| 192 | case never executed: QSurfaceFormat::OpenGLES:case QSurfaceFormat::OpenGLES:never executed: case QSurfaceFormat::OpenGLES: | 0 | ||||||||||||||||||
| 193 | if (m_format.majorVersion() == 1
| 0 | ||||||||||||||||||
| 194 | configureAttributes.append(0x0001); | - | ||||||||||||||||||
| 195 | break; never executed: break; | 0 | ||||||||||||||||||
| 196 | } | - | ||||||||||||||||||
| 197 | - | |||||||||||||||||||
| 198 | default never executed: :default:never executed: default:code before this statement never executed: default: | 0 | ||||||||||||||||||
| 199 | needsES2Plus = true; | - | ||||||||||||||||||
| 200 | break; never executed: break; | 0 | ||||||||||||||||||
| 201 | } | - | ||||||||||||||||||
| 202 | if (needsES2Plus
| 0 | ||||||||||||||||||
| 203 | if (m_format.majorVersion() >= 3
| 0 | ||||||||||||||||||
| 204 | configureAttributes.append(0x00000040); never executed: configureAttributes.append(0x00000040); | 0 | ||||||||||||||||||
| 205 | else | - | ||||||||||||||||||
| 206 | configureAttributes.append(0x0004); never executed: configureAttributes.append(0x0004); | 0 | ||||||||||||||||||
| 207 | } | - | ||||||||||||||||||
| 208 | configureAttributes.append(0x3038); | - | ||||||||||||||||||
| 209 | - | |||||||||||||||||||
| 210 | EGLConfig cfg = 0; | - | ||||||||||||||||||
| 211 | do { | - | ||||||||||||||||||
| 212 | - | |||||||||||||||||||
| 213 | EGLint matching = 0; | - | ||||||||||||||||||
| 214 | if (!eglChooseConfig(display(), configureAttributes.constData(), 0, 0, &matching)
| 0 | ||||||||||||||||||
| 215 | continue; never executed: continue; | 0 | ||||||||||||||||||
| 216 | - | |||||||||||||||||||
| 217 | - | |||||||||||||||||||
| 218 | - | |||||||||||||||||||
| 219 | int i = configureAttributes.indexOf(0x3024); | - | ||||||||||||||||||
| 220 | m_confAttrRed = configureAttributes.at(i+1); | - | ||||||||||||||||||
| 221 | i = configureAttributes.indexOf(0x3023); | - | ||||||||||||||||||
| 222 | m_confAttrGreen = configureAttributes.at(i+1); | - | ||||||||||||||||||
| 223 | i = configureAttributes.indexOf(0x3022); | - | ||||||||||||||||||
| 224 | m_confAttrBlue = configureAttributes.at(i+1); | - | ||||||||||||||||||
| 225 | i = configureAttributes.indexOf(0x3021); | - | ||||||||||||||||||
| 226 | m_confAttrAlpha = i == -1
| 0 | ||||||||||||||||||
| 227 | - | |||||||||||||||||||
| 228 | QVector<EGLConfig> configs(matching); | - | ||||||||||||||||||
| 229 | eglChooseConfig(display(), configureAttributes.constData(), configs.data(), configs.size(), &matching); | - | ||||||||||||||||||
| 230 | if (!cfg
| 0 | ||||||||||||||||||
| 231 | cfg = configs.first(); never executed: cfg = configs.first(); | 0 | ||||||||||||||||||
| 232 | for (int i = 0; i < configs.size()
| 0 | ||||||||||||||||||
| 233 | if (filterConfig(configs[i])
| 0 | ||||||||||||||||||
| 234 | return never executed: configs.at(i);return configs.at(i);never executed: return configs.at(i); | 0 | ||||||||||||||||||
| 235 | } never executed: end of block | 0 | ||||||||||||||||||
| 236 | } never executed: while (q_reduceConfigAttributes(&configureAttributes)end of block
| 0 | ||||||||||||||||||
| 237 | - | |||||||||||||||||||
| 238 | if (!cfg
| 0 | ||||||||||||||||||
| 239 | QMessageLogger(__FILE__, 315, __PRETTY_FUNCTION__).warning("Cannot find EGLConfig, returning null config"); never executed: QMessageLogger(__FILE__, 315, __PRETTY_FUNCTION__).warning("Cannot find EGLConfig, returning null config"); | 0 | ||||||||||||||||||
| 240 | return never executed: cfg;return cfg;never executed: return cfg; | 0 | ||||||||||||||||||
| 241 | } | - | ||||||||||||||||||
| 242 | - | |||||||||||||||||||
| 243 | bool QEglConfigChooser::filterConfig(EGLConfig config) const | - | ||||||||||||||||||
| 244 | { | - | ||||||||||||||||||
| 245 | - | |||||||||||||||||||
| 246 | - | |||||||||||||||||||
| 247 | if (m_ignore
| 0 | ||||||||||||||||||
| 248 | return never executed: true;return true;never executed: return true; | 0 | ||||||||||||||||||
| 249 | - | |||||||||||||||||||
| 250 | EGLint red = 0; | - | ||||||||||||||||||
| 251 | EGLint green = 0; | - | ||||||||||||||||||
| 252 | EGLint blue = 0; | - | ||||||||||||||||||
| 253 | EGLint alpha = 0; | - | ||||||||||||||||||
| 254 | - | |||||||||||||||||||
| 255 | - | |||||||||||||||||||
| 256 | if (m_confAttrRed
| 0 | ||||||||||||||||||
| 257 | eglGetConfigAttrib(display(), config, 0x3024, &red); never executed: eglGetConfigAttrib(display(), config, 0x3024, &red); | 0 | ||||||||||||||||||
| 258 | if (m_confAttrGreen
| 0 | ||||||||||||||||||
| 259 | eglGetConfigAttrib(display(), config, 0x3023, &green); never executed: eglGetConfigAttrib(display(), config, 0x3023, &green); | 0 | ||||||||||||||||||
| 260 | if (m_confAttrBlue
| 0 | ||||||||||||||||||
| 261 | eglGetConfigAttrib(display(), config, 0x3022, &blue); never executed: eglGetConfigAttrib(display(), config, 0x3022, &blue); | 0 | ||||||||||||||||||
| 262 | if (m_confAttrAlpha
| 0 | ||||||||||||||||||
| 263 | eglGetConfigAttrib(display(), config, 0x3021, &alpha); never executed: eglGetConfigAttrib(display(), config, 0x3021, &alpha); | 0 | ||||||||||||||||||
| 264 | - | |||||||||||||||||||
| 265 | return never executed: red == m_confAttrRed && green == m_confAttrGreenreturn red == m_confAttrRed && green == m_confAttrGreen && blue == m_confAttrBlue && alpha == m_confAttrAlpha;never executed: return red == m_confAttrRed && green == m_confAttrGreen && blue == m_confAttrBlue && alpha == m_confAttrAlpha; | 0 | ||||||||||||||||||
| 266 | && blue == m_confAttrBlue && alpha == m_confAttrAlpha; never executed: return red == m_confAttrRed && green == m_confAttrGreen && blue == m_confAttrBlue && alpha == m_confAttrAlpha; | 0 | ||||||||||||||||||
| 267 | } | - | ||||||||||||||||||
| 268 | - | |||||||||||||||||||
| 269 | EGLConfig q_configFromGLFormat(EGLDisplay display, const QSurfaceFormat &format, bool highestPixelFormat, int surfaceType) | - | ||||||||||||||||||
| 270 | { | - | ||||||||||||||||||
| 271 | QEglConfigChooser chooser(display); | - | ||||||||||||||||||
| 272 | chooser.setSurfaceFormat(format); | - | ||||||||||||||||||
| 273 | chooser.setSurfaceType(surfaceType); | - | ||||||||||||||||||
| 274 | chooser.setIgnoreColorChannels(highestPixelFormat); | - | ||||||||||||||||||
| 275 | - | |||||||||||||||||||
| 276 | return never executed: chooser.chooseConfig();return chooser.chooseConfig();never executed: return chooser.chooseConfig(); | 0 | ||||||||||||||||||
| 277 | } | - | ||||||||||||||||||
| 278 | - | |||||||||||||||||||
| 279 | QSurfaceFormat q_glFormatFromConfig(EGLDisplay display, const EGLConfig config, const QSurfaceFormat &referenceFormat) | - | ||||||||||||||||||
| 280 | { | - | ||||||||||||||||||
| 281 | QSurfaceFormat format; | - | ||||||||||||||||||
| 282 | EGLint redSize = 0; | - | ||||||||||||||||||
| 283 | EGLint greenSize = 0; | - | ||||||||||||||||||
| 284 | EGLint blueSize = 0; | - | ||||||||||||||||||
| 285 | EGLint alphaSize = 0; | - | ||||||||||||||||||
| 286 | EGLint depthSize = 0; | - | ||||||||||||||||||
| 287 | EGLint stencilSize = 0; | - | ||||||||||||||||||
| 288 | EGLint sampleCount = 0; | - | ||||||||||||||||||
| 289 | EGLint renderableType = 0; | - | ||||||||||||||||||
| 290 | - | |||||||||||||||||||
| 291 | eglGetConfigAttrib(display, config, 0x3024, &redSize); | - | ||||||||||||||||||
| 292 | eglGetConfigAttrib(display, config, 0x3023, &greenSize); | - | ||||||||||||||||||
| 293 | eglGetConfigAttrib(display, config, 0x3022, &blueSize); | - | ||||||||||||||||||
| 294 | eglGetConfigAttrib(display, config, 0x3021, &alphaSize); | - | ||||||||||||||||||
| 295 | eglGetConfigAttrib(display, config, 0x3025, &depthSize); | - | ||||||||||||||||||
| 296 | eglGetConfigAttrib(display, config, 0x3026, &stencilSize); | - | ||||||||||||||||||
| 297 | eglGetConfigAttrib(display, config, 0x3031, &sampleCount); | - | ||||||||||||||||||
| 298 | eglGetConfigAttrib(display, config, 0x3040, &renderableType); | - | ||||||||||||||||||
| 299 | - | |||||||||||||||||||
| 300 | if (referenceFormat.renderableType() == QSurfaceFormat::OpenVG
| 0 | ||||||||||||||||||
| 301 | format.setRenderableType(QSurfaceFormat::OpenVG); never executed: format.setRenderableType(QSurfaceFormat::OpenVG); | 0 | ||||||||||||||||||
| 302 | - | |||||||||||||||||||
| 303 | else if (referenceFormat.renderableType() == QSurfaceFormat::OpenGL
| 0 | ||||||||||||||||||
| 304 | && (
| 0 | ||||||||||||||||||
| 305 | format.setRenderableType(QSurfaceFormat::OpenGL); never executed: format.setRenderableType(QSurfaceFormat::OpenGL); | 0 | ||||||||||||||||||
| 306 | else if (referenceFormat.renderableType() == QSurfaceFormat::DefaultRenderableType
| 0 | ||||||||||||||||||
| 307 | - | |||||||||||||||||||
| 308 | && QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL
| 0 | ||||||||||||||||||
| 309 | - | |||||||||||||||||||
| 310 | && (
| 0 | ||||||||||||||||||
| 311 | format.setRenderableType(QSurfaceFormat::OpenGL); never executed: format.setRenderableType(QSurfaceFormat::OpenGL); | 0 | ||||||||||||||||||
| 312 | - | |||||||||||||||||||
| 313 | else | - | ||||||||||||||||||
| 314 | format.setRenderableType(QSurfaceFormat::OpenGLES); never executed: format.setRenderableType(QSurfaceFormat::OpenGLES); | 0 | ||||||||||||||||||
| 315 | - | |||||||||||||||||||
| 316 | format.setRedBufferSize(redSize); | - | ||||||||||||||||||
| 317 | format.setGreenBufferSize(greenSize); | - | ||||||||||||||||||
| 318 | format.setBlueBufferSize(blueSize); | - | ||||||||||||||||||
| 319 | format.setAlphaBufferSize(alphaSize); | - | ||||||||||||||||||
| 320 | format.setDepthBufferSize(depthSize); | - | ||||||||||||||||||
| 321 | format.setStencilBufferSize(stencilSize); | - | ||||||||||||||||||
| 322 | format.setSamples(sampleCount); | - | ||||||||||||||||||
| 323 | format.setStereo(false); | - | ||||||||||||||||||
| 324 | format.setSwapInterval(referenceFormat.swapInterval()); | - | ||||||||||||||||||
| 325 | - | |||||||||||||||||||
| 326 | - | |||||||||||||||||||
| 327 | - | |||||||||||||||||||
| 328 | - | |||||||||||||||||||
| 329 | eglGetError(); | - | ||||||||||||||||||
| 330 | - | |||||||||||||||||||
| 331 | return never executed: format;return format;never executed: return format; | 0 | ||||||||||||||||||
| 332 | } | - | ||||||||||||||||||
| 333 | - | |||||||||||||||||||
| 334 | bool q_hasEglExtension(EGLDisplay display, const char* extensionName) | - | ||||||||||||||||||
| 335 | { | - | ||||||||||||||||||
| 336 | QList<QByteArray> extensions = | - | ||||||||||||||||||
| 337 | QByteArray(reinterpret_cast<const char *> | - | ||||||||||||||||||
| 338 | (eglQueryString(display, 0x3055))).split(' '); | - | ||||||||||||||||||
| 339 | return never executed: extensions.contains(extensionName);return extensions.contains(extensionName);never executed: return extensions.contains(extensionName); | 0 | ||||||||||||||||||
| 340 | } | - | ||||||||||||||||||
| 341 | - | |||||||||||||||||||
| 342 | struct AttrInfo { EGLint attr; const char *name; }; | - | ||||||||||||||||||
| 343 | static struct AttrInfo attrs[] = { | - | ||||||||||||||||||
| 344 | {0x3020, "EGL_BUFFER_SIZE"}, | - | ||||||||||||||||||
| 345 | {0x3021, "EGL_ALPHA_SIZE"}, | - | ||||||||||||||||||
| 346 | {0x3022, "EGL_BLUE_SIZE"}, | - | ||||||||||||||||||
| 347 | {0x3023, "EGL_GREEN_SIZE"}, | - | ||||||||||||||||||
| 348 | {0x3024, "EGL_RED_SIZE"}, | - | ||||||||||||||||||
| 349 | {0x3025, "EGL_DEPTH_SIZE"}, | - | ||||||||||||||||||
| 350 | {0x3026, "EGL_STENCIL_SIZE"}, | - | ||||||||||||||||||
| 351 | {0x3027, "EGL_CONFIG_CAVEAT"}, | - | ||||||||||||||||||
| 352 | {0x3028, "EGL_CONFIG_ID"}, | - | ||||||||||||||||||
| 353 | {0x3029, "EGL_LEVEL"}, | - | ||||||||||||||||||
| 354 | {0x302A, "EGL_MAX_PBUFFER_HEIGHT"}, | - | ||||||||||||||||||
| 355 | {0x302B, "EGL_MAX_PBUFFER_PIXELS"}, | - | ||||||||||||||||||
| 356 | {0x302C, "EGL_MAX_PBUFFER_WIDTH"}, | - | ||||||||||||||||||
| 357 | {0x302D, "EGL_NATIVE_RENDERABLE"}, | - | ||||||||||||||||||
| 358 | {0x302E, "EGL_NATIVE_VISUAL_ID"}, | - | ||||||||||||||||||
| 359 | {0x302F, "EGL_NATIVE_VISUAL_TYPE"}, | - | ||||||||||||||||||
| 360 | {0x3031, "EGL_SAMPLES"}, | - | ||||||||||||||||||
| 361 | {0x3032, "EGL_SAMPLE_BUFFERS"}, | - | ||||||||||||||||||
| 362 | {0x3033, "EGL_SURFACE_TYPE"}, | - | ||||||||||||||||||
| 363 | {0x3034, "EGL_TRANSPARENT_TYPE"}, | - | ||||||||||||||||||
| 364 | {0x3035, "EGL_TRANSPARENT_BLUE_VALUE"}, | - | ||||||||||||||||||
| 365 | {0x3036, "EGL_TRANSPARENT_GREEN_VALUE"}, | - | ||||||||||||||||||
| 366 | {0x3037, "EGL_TRANSPARENT_RED_VALUE"}, | - | ||||||||||||||||||
| 367 | {0x3039, "EGL_BIND_TO_TEXTURE_RGB"}, | - | ||||||||||||||||||
| 368 | {0x303A, "EGL_BIND_TO_TEXTURE_RGBA"}, | - | ||||||||||||||||||
| 369 | {0x303B, "EGL_MIN_SWAP_INTERVAL"}, | - | ||||||||||||||||||
| 370 | {0x303C, "EGL_MAX_SWAP_INTERVAL"}, | - | ||||||||||||||||||
| 371 | {-1, 0}}; | - | ||||||||||||||||||
| 372 | - | |||||||||||||||||||
| 373 | void q_printEglConfig(EGLDisplay display, EGLConfig config) | - | ||||||||||||||||||
| 374 | { | - | ||||||||||||||||||
| 375 | EGLint index; | - | ||||||||||||||||||
| 376 | for (index = 0; attrs[index].attr != -1
| 0 | ||||||||||||||||||
| 377 | EGLint value; | - | ||||||||||||||||||
| 378 | if (eglGetConfigAttrib(display, config, attrs[index].attr, &value)
| 0 | ||||||||||||||||||
| 379 | QMessageLogger(__FILE__, 455, __PRETTY_FUNCTION__).debug("\t%s: %d", attrs[index].name, (int)value); | - | ||||||||||||||||||
| 380 | } never executed: end of block | 0 | ||||||||||||||||||
| 381 | } never executed: end of block | 0 | ||||||||||||||||||
| 382 | } never executed: end of block | 0 | ||||||||||||||||||
| 383 | - | |||||||||||||||||||
| 384 | - | |||||||||||||||||||
| 385 | - | |||||||||||||||||||
| 386 | QSizeF q_physicalScreenSizeFromFb(int framebufferDevice, const QSize &screenSize) | - | ||||||||||||||||||
| 387 | { | - | ||||||||||||||||||
| 388 | - | |||||||||||||||||||
| 389 | - | |||||||||||||||||||
| 390 | - | |||||||||||||||||||
| 391 | const int defaultPhysicalDpi = 100; | - | ||||||||||||||||||
| 392 | static QSizeF size; | - | ||||||||||||||||||
| 393 | - | |||||||||||||||||||
| 394 | if (size.isEmpty()
| 0 | ||||||||||||||||||
| 395 | - | |||||||||||||||||||
| 396 | int width = qEnvironmentVariableIntValue("QT_QPA_EGLFS_PHYSICAL_WIDTH"); | - | ||||||||||||||||||
| 397 | int height = qEnvironmentVariableIntValue("QT_QPA_EGLFS_PHYSICAL_HEIGHT"); | - | ||||||||||||||||||
| 398 | - | |||||||||||||||||||
| 399 | if (width
| 0 | ||||||||||||||||||
| 400 | size.setWidth(width); | - | ||||||||||||||||||
| 401 | size.setHeight(height); | - | ||||||||||||||||||
| 402 | return never executed: size;return size;never executed: return size; | 0 | ||||||||||||||||||
| 403 | } | - | ||||||||||||||||||
| 404 | - | |||||||||||||||||||
| 405 | int w = -1; | - | ||||||||||||||||||
| 406 | int h = -1; | - | ||||||||||||||||||
| 407 | QSize screenResolution; | - | ||||||||||||||||||
| 408 | - | |||||||||||||||||||
| 409 | struct fb_var_screeninfo vinfo; | - | ||||||||||||||||||
| 410 | - | |||||||||||||||||||
| 411 | if (framebufferDevice != -1
| 0 | ||||||||||||||||||
| 412 | if (ioctl(framebufferDevice, 0x4600, &vinfo) == -1
| 0 | ||||||||||||||||||
| 413 | QMessageLogger(__FILE__, 489, __PRETTY_FUNCTION__).warning("eglconvenience: Could not query screen info"); | - | ||||||||||||||||||
| 414 | } never executed: else {end of block | 0 | ||||||||||||||||||
| 415 | w = vinfo.width; | - | ||||||||||||||||||
| 416 | h = vinfo.height; | - | ||||||||||||||||||
| 417 | screenResolution = QSize(vinfo.xres, vinfo.yres); | - | ||||||||||||||||||
| 418 | } never executed: end of block | 0 | ||||||||||||||||||
| 419 | } else | - | ||||||||||||||||||
| 420 | - | |||||||||||||||||||
| 421 | { | - | ||||||||||||||||||
| 422 | - | |||||||||||||||||||
| 423 | - | |||||||||||||||||||
| 424 | screenResolution = screenSize.isEmpty()
| 0 | ||||||||||||||||||
| 425 | } never executed: end of block | 0 | ||||||||||||||||||
| 426 | - | |||||||||||||||||||
| 427 | size.setWidth(w <= 0 ? screenResolution.width() * Q_MM_PER_INCH / defaultPhysicalDpi : qreal(w)); | - | ||||||||||||||||||
| 428 | size.setHeight(h <= 0 ? screenResolution.height() * Q_MM_PER_INCH / defaultPhysicalDpi : qreal(h)); | - | ||||||||||||||||||
| 429 | - | |||||||||||||||||||
| 430 | if (w <= 0
| 0 | ||||||||||||||||||
| 431 | QMessageLogger(__FILE__, 507, __PRETTY_FUNCTION__).warning("Unable to query physical screen size, defaulting to %d dpi.\n" never executed: QMessageLogger(__FILE__, 507, __PRETTY_FUNCTION__).warning("Unable to query physical screen size, defaulting to %d dpi.\n" "To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH " "and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).", defaultPhysicalDpi); | 0 | ||||||||||||||||||
| 432 | "To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH " never executed: QMessageLogger(__FILE__, 507, __PRETTY_FUNCTION__).warning("Unable to query physical screen size, defaulting to %d dpi.\n" "To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH " "and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).", defaultPhysicalDpi); | 0 | ||||||||||||||||||
| 433 | "and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).", defaultPhysicalDpi); never executed: QMessageLogger(__FILE__, 507, __PRETTY_FUNCTION__).warning("Unable to query physical screen size, defaulting to %d dpi.\n" "To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH " "and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).", defaultPhysicalDpi); | 0 | ||||||||||||||||||
| 434 | } never executed: end of block | 0 | ||||||||||||||||||
| 435 | - | |||||||||||||||||||
| 436 | return never executed: size;return size;never executed: return size; | 0 | ||||||||||||||||||
| 437 | } | - | ||||||||||||||||||
| 438 | - | |||||||||||||||||||
| 439 | QSize q_screenSizeFromFb(int framebufferDevice) | - | ||||||||||||||||||
| 440 | { | - | ||||||||||||||||||
| 441 | - | |||||||||||||||||||
| 442 | - | |||||||||||||||||||
| 443 | - | |||||||||||||||||||
| 444 | const int defaultWidth = 800; | - | ||||||||||||||||||
| 445 | const int defaultHeight = 600; | - | ||||||||||||||||||
| 446 | static QSize size; | - | ||||||||||||||||||
| 447 | - | |||||||||||||||||||
| 448 | if (size.isEmpty()
| 0 | ||||||||||||||||||
| 449 | int width = qEnvironmentVariableIntValue("QT_QPA_EGLFS_WIDTH"); | - | ||||||||||||||||||
| 450 | int height = qEnvironmentVariableIntValue("QT_QPA_EGLFS_HEIGHT"); | - | ||||||||||||||||||
| 451 | - | |||||||||||||||||||
| 452 | if (width
| 0 | ||||||||||||||||||
| 453 | size.setWidth(width); | - | ||||||||||||||||||
| 454 | size.setHeight(height); | - | ||||||||||||||||||
| 455 | return never executed: size;return size;never executed: return size; | 0 | ||||||||||||||||||
| 456 | } | - | ||||||||||||||||||
| 457 | - | |||||||||||||||||||
| 458 | - | |||||||||||||||||||
| 459 | struct fb_var_screeninfo vinfo; | - | ||||||||||||||||||
| 460 | int xres = -1; | - | ||||||||||||||||||
| 461 | int yres = -1; | - | ||||||||||||||||||
| 462 | - | |||||||||||||||||||
| 463 | if (framebufferDevice != -1
| 0 | ||||||||||||||||||
| 464 | if (ioctl(framebufferDevice, 0x4600, &vinfo) == -1
| 0 | ||||||||||||||||||
| 465 | QMessageLogger(__FILE__, 541, __PRETTY_FUNCTION__).warning("eglconvenience: Could not read screen info"); | - | ||||||||||||||||||
| 466 | } never executed: else {end of block | 0 | ||||||||||||||||||
| 467 | xres = vinfo.xres; | - | ||||||||||||||||||
| 468 | yres = vinfo.yres; | - | ||||||||||||||||||
| 469 | } never executed: end of block | 0 | ||||||||||||||||||
| 470 | } | - | ||||||||||||||||||
| 471 | - | |||||||||||||||||||
| 472 | size.setWidth(xres <= 0 ? defaultWidth : xres); | - | ||||||||||||||||||
| 473 | size.setHeight(yres <= 0 ? defaultHeight : yres); | - | ||||||||||||||||||
| 474 | - | |||||||||||||||||||
| 475 | - | |||||||||||||||||||
| 476 | - | |||||||||||||||||||
| 477 | - | |||||||||||||||||||
| 478 | } never executed: end of block | 0 | ||||||||||||||||||
| 479 | - | |||||||||||||||||||
| 480 | return never executed: size;return size;never executed: return size; | 0 | ||||||||||||||||||
| 481 | } | - | ||||||||||||||||||
| 482 | - | |||||||||||||||||||
| 483 | int q_screenDepthFromFb(int framebufferDevice) | - | ||||||||||||||||||
| 484 | { | - | ||||||||||||||||||
| 485 | - | |||||||||||||||||||
| 486 | - | |||||||||||||||||||
| 487 | - | |||||||||||||||||||
| 488 | const int defaultDepth = 32; | - | ||||||||||||||||||
| 489 | static int depth = qEnvironmentVariableIntValue("QT_QPA_EGLFS_DEPTH"); | - | ||||||||||||||||||
| 490 | - | |||||||||||||||||||
| 491 | if (depth == 0
| 0 | ||||||||||||||||||
| 492 | - | |||||||||||||||||||
| 493 | struct fb_var_screeninfo vinfo; | - | ||||||||||||||||||
| 494 | - | |||||||||||||||||||
| 495 | if (framebufferDevice != -1
| 0 | ||||||||||||||||||
| 496 | if (ioctl(framebufferDevice, 0x4600, &vinfo) == -1
| 0 | ||||||||||||||||||
| 497 | QMessageLogger(__FILE__, 573, __PRETTY_FUNCTION__).warning("eglconvenience: Could not query screen info"); never executed: QMessageLogger(__FILE__, 573, __PRETTY_FUNCTION__).warning("eglconvenience: Could not query screen info"); | 0 | ||||||||||||||||||
| 498 | else | - | ||||||||||||||||||
| 499 | depth = vinfo.bits_per_pixel; never executed: depth = vinfo.bits_per_pixel; | 0 | ||||||||||||||||||
| 500 | } | - | ||||||||||||||||||
| 501 | - | |||||||||||||||||||
| 502 | if (depth <= 0
| 0 | ||||||||||||||||||
| 503 | depth = defaultDepth; never executed: depth = defaultDepth; | 0 | ||||||||||||||||||
| 504 | - | |||||||||||||||||||
| 505 | - | |||||||||||||||||||
| 506 | - | |||||||||||||||||||
| 507 | } never executed: end of block | 0 | ||||||||||||||||||
| 508 | - | |||||||||||||||||||
| 509 | return never executed: depth;return depth;never executed: return depth; | 0 | ||||||||||||||||||
| 510 | } | - | ||||||||||||||||||
| 511 | - | |||||||||||||||||||
| 512 | qreal q_refreshRateFromFb(int framebufferDevice) | - | ||||||||||||||||||
| 513 | { | - | ||||||||||||||||||
| 514 | - | |||||||||||||||||||
| 515 | - | |||||||||||||||||||
| 516 | - | |||||||||||||||||||
| 517 | - | |||||||||||||||||||
| 518 | static qreal rate = 0; | - | ||||||||||||||||||
| 519 | - | |||||||||||||||||||
| 520 | - | |||||||||||||||||||
| 521 | if (rate == 0
| 0 | ||||||||||||||||||
| 522 | if (framebufferDevice != -1
| 0 | ||||||||||||||||||
| 523 | struct fb_var_screeninfo vinfo; | - | ||||||||||||||||||
| 524 | if (ioctl(framebufferDevice, 0x4600, &vinfo) != -1
| 0 | ||||||||||||||||||
| 525 | const quint64 quot = quint64(vinfo.left_margin + vinfo.right_margin + vinfo.xres + vinfo.hsync_len) | - | ||||||||||||||||||
| 526 | * quint64(vinfo.upper_margin + vinfo.lower_margin + vinfo.yres + vinfo.vsync_len) | - | ||||||||||||||||||
| 527 | * vinfo.pixclock; | - | ||||||||||||||||||
| 528 | if (quot
| 0 | ||||||||||||||||||
| 529 | rate = 1000000000000LLU / quot; never executed: rate = 1000000000000LLU / quot; | 0 | ||||||||||||||||||
| 530 | } never executed: else {end of block | 0 | ||||||||||||||||||
| 531 | QMessageLogger(__FILE__, 607, __PRETTY_FUNCTION__).warning("eglconvenience: Could not query screen info"); | - | ||||||||||||||||||
| 532 | } never executed: end of block | 0 | ||||||||||||||||||
| 533 | } | - | ||||||||||||||||||
| 534 | } never executed: end of block | 0 | ||||||||||||||||||
| 535 | - | |||||||||||||||||||
| 536 | - | |||||||||||||||||||
| 537 | if (rate == 0
| 0 | ||||||||||||||||||
| 538 | rate = 60; never executed: rate = 60; | 0 | ||||||||||||||||||
| 539 | - | |||||||||||||||||||
| 540 | return never executed: rate;return rate;never executed: return rate; | 0 | ||||||||||||||||||
| 541 | } | - | ||||||||||||||||||
| 542 | - | |||||||||||||||||||
| 543 | - | |||||||||||||||||||
| 544 | - | |||||||||||||||||||
| 545 | - | |||||||||||||||||||
| Switch to Source code | Preprocessed file |