Changeset View
Changeset View
Standalone View
Standalone View
platformsupport/scenes/opengl/abstract_egl_backend.cpp
Show First 20 Lines • Show All 211 Lines • ▼ Show 20 Line(s) | 209 | { | |||
---|---|---|---|---|---|
212 | } | 212 | } | ||
213 | return QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES; | 213 | return QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES; | ||
214 | } | 214 | } | ||
215 | 215 | | |||
216 | bool AbstractEglBackend::createContext() | 216 | bool AbstractEglBackend::createContext() | ||
217 | { | 217 | { | ||
218 | const bool haveRobustness = hasExtension(QByteArrayLiteral("EGL_EXT_create_context_robustness")); | 218 | const bool haveRobustness = hasExtension(QByteArrayLiteral("EGL_EXT_create_context_robustness")); | ||
219 | const bool haveCreateContext = hasExtension(QByteArrayLiteral("EGL_KHR_create_context")); | 219 | const bool haveCreateContext = hasExtension(QByteArrayLiteral("EGL_KHR_create_context")); | ||
220 | const bool haveContextPriority = hasExtension(QByteArrayLiteral("EGL_IMG_context_priority")); | ||||
220 | 221 | | |||
221 | std::vector<std::unique_ptr<AbstractOpenGLContextAttributeBuilder>> candidates; | 222 | std::vector<std::unique_ptr<AbstractOpenGLContextAttributeBuilder>> candidates; | ||
222 | if (isOpenGLES()) { | 223 | if (isOpenGLES()) { | ||
224 | if (haveCreateContext && haveRobustness && haveContextPriority) { | ||||
225 | auto glesRobustPriority = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglOpenGLESContextAttributeBuilder); | ||||
226 | glesRobustPriority->setVersion(2); | ||||
227 | glesRobustPriority->setRobust(true); | ||||
228 | glesRobustPriority->setHighPriority(true); | ||||
229 | candidates.push_back(std::move(glesRobustPriority)); | ||||
230 | } | ||||
223 | if (haveCreateContext && haveRobustness) { | 231 | if (haveCreateContext && haveRobustness) { | ||
224 | auto glesRobust = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglOpenGLESContextAttributeBuilder); | 232 | auto glesRobust = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglOpenGLESContextAttributeBuilder); | ||
225 | glesRobust->setVersion(2); | 233 | glesRobust->setVersion(2); | ||
226 | glesRobust->setRobust(true); | 234 | glesRobust->setRobust(true); | ||
227 | candidates.push_back(std::move(glesRobust)); | 235 | candidates.push_back(std::move(glesRobust)); | ||
228 | } | 236 | } | ||
237 | if (haveContextPriority) { | ||||
238 | auto glesPriority = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglOpenGLESContextAttributeBuilder); | ||||
239 | glesPriority->setVersion(2); | ||||
240 | glesPriority->setHighPriority(true); | ||||
241 | candidates.push_back(std::move(glesPriority)); | ||||
242 | } | ||||
229 | auto gles = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglOpenGLESContextAttributeBuilder); | 243 | auto gles = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglOpenGLESContextAttributeBuilder); | ||
230 | gles->setVersion(2); | 244 | gles->setVersion(2); | ||
231 | candidates.push_back(std::move(gles)); | 245 | candidates.push_back(std::move(gles)); | ||
232 | } else { | 246 | } else { | ||
233 | if (options->glCoreProfile() && haveCreateContext) { | 247 | if (options->glCoreProfile() && haveCreateContext) { | ||
248 | if (haveRobustness && haveContextPriority) { | ||||
249 | auto robustCorePriority = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglContextAttributeBuilder); | ||||
250 | robustCorePriority->setVersion(3, 1); | ||||
251 | robustCorePriority->setRobust(true); | ||||
252 | robustCorePriority->setHighPriority(true); | ||||
253 | candidates.push_back(std::move(robustCorePriority)); | ||||
254 | } | ||||
234 | if (haveRobustness) { | 255 | if (haveRobustness) { | ||
235 | auto robustCore = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglContextAttributeBuilder); | 256 | auto robustCore = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglContextAttributeBuilder); | ||
236 | robustCore->setVersion(3, 1); | 257 | robustCore->setVersion(3, 1); | ||
237 | robustCore->setRobust(true); | 258 | robustCore->setRobust(true); | ||
238 | candidates.push_back(std::move(robustCore)); | 259 | candidates.push_back(std::move(robustCore)); | ||
239 | } | 260 | } | ||
261 | if (haveContextPriority) { | ||||
262 | auto corePriority = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglContextAttributeBuilder); | ||||
263 | corePriority->setVersion(3, 1); | ||||
264 | corePriority->setHighPriority(true); | ||||
265 | candidates.push_back(std::move(corePriority)); | ||||
266 | } | ||||
240 | auto core = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglContextAttributeBuilder); | 267 | auto core = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglContextAttributeBuilder); | ||
241 | core->setVersion(3, 1); | 268 | core->setVersion(3, 1); | ||
242 | candidates.push_back(std::move(core)); | 269 | candidates.push_back(std::move(core)); | ||
243 | } | 270 | } | ||
271 | if (haveRobustness && haveCreateContext && haveContextPriority) { | ||||
272 | auto robustPriority = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglContextAttributeBuilder); | ||||
273 | robustPriority->setRobust(true); | ||||
274 | robustPriority->setHighPriority(true); | ||||
275 | candidates.push_back(std::move(robustPriority)); | ||||
276 | } | ||||
244 | if (haveRobustness && haveCreateContext) { | 277 | if (haveRobustness && haveCreateContext) { | ||
245 | auto robust = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglContextAttributeBuilder); | 278 | auto robust = std::unique_ptr<AbstractOpenGLContextAttributeBuilder>(new EglContextAttributeBuilder); | ||
246 | robust->setRobust(true); | 279 | robust->setRobust(true); | ||
247 | candidates.push_back(std::move(robust)); | 280 | candidates.push_back(std::move(robust)); | ||
248 | } | 281 | } | ||
249 | candidates.emplace_back(new EglContextAttributeBuilder); | 282 | candidates.emplace_back(new EglContextAttributeBuilder); | ||
250 | } | 283 | } | ||
251 | 284 | | |||
▲ Show 20 Lines • Show All 260 Lines • Show Last 20 Lines |