Krita Source Code Documentation
Loading...
Searching...
No Matches
KisOpenGLModeProber::Result Class Reference

#include <KisOpenGLModeProber.h>

Public Member Functions

QString driverVersionString () const
 
QSet< QByteArray > extensions () const
 
QSurfaceFormat format () const
 
int glMajorVersion () const
 
int glMinorVersion () const
 
bool hasOpenGL3 () const
 
bool isOpenGLES () const
 
bool isSupportedVersion () const
 
QString rendererString () const
 
 Result (QOpenGLContext &context)
 
QString shadingLanguageString () const
 
bool supportsBufferInvalidation () const
 
bool supportsBufferMapping () const
 
bool supportsDeprecatedFunctions () const
 
bool supportsFBO () const
 
bool supportsFenceSync () const
 
bool supportsLoD () const
 
bool supportsVAO () const
 
QString vendorString () const
 
std::optional< KisOpenGL::XcbGLProviderProtocol > xcbGlProviderProtocol ()
 

Private Attributes

QString m_driverVersionString
 
QSet< QByteArray > m_extensions
 
QSurfaceFormat m_format
 
int m_glMajorVersion = 0
 
int m_glMinorVersion = 0
 
bool m_isOpenGLES = false
 
QString m_rendererString
 
QString m_shadingLanguageString
 
bool m_supportsBufferInvalidation = false
 
bool m_supportsBufferMapping = false
 
bool m_supportsDeprecatedFunctions = false
 
bool m_supportsFBO = false
 
bool m_supportsLod = false
 
QString m_vendorString
 
std::optional< KisOpenGL::XcbGLProviderProtocol > m_xcbGlProviderProtocol
 

Detailed Description

Definition at line 49 of file KisOpenGLModeProber.h.

Constructor & Destructor Documentation

◆ Result()

KisOpenGLModeProber::Result::Result ( QOpenGLContext & context)

Definition at line 368 of file KisOpenGLModeProber.cpp.

368 {
369 if (!context.isValid()) {
370 return;
371 }
372
373 QOpenGLFunctions *funcs = context.functions(); // funcs is ready to be used
374
375 m_rendererString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_RENDERER)));
376 m_driverVersionString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_VERSION)));
377 m_vendorString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_VENDOR)));
378 m_shadingLanguageString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_SHADING_LANGUAGE_VERSION)));
379 m_glMajorVersion = context.format().majorVersion();
380 m_glMinorVersion = context.format().minorVersion();
381 m_supportsDeprecatedFunctions = (context.format().options() & QSurfaceFormat::DeprecatedFunctions);
382 m_isOpenGLES = context.isOpenGLES();
383 m_format = context.format();
384 m_supportsFBO = context.functions()->hasOpenGLFeature(QOpenGLFunctions::Framebuffers);
385
387 m_glMajorVersion >= 3 ||
388 context.hasExtension("GL_OES_mapbuffer") ||
389 context.hasExtension("GL_EXT_map_buffer_range") ||
390 context.hasExtension("GL_ARB_map_buffer_range");
391
393 ((m_glMajorVersion >= 4 && m_glMinorVersion >= 3) ||
394 context.hasExtension("GL_ARB_invalidate_subdata"));
395 m_supportsLod = context.format().majorVersion() >= 3 || (m_isOpenGLES && context.hasExtension("GL_EXT_shader_texture_lod"));
396
397#ifdef HAVE_X11
398 if (QApplication::platformName() == "xcb") {
399 QPlatformNativeInterface *native = qApp->platformNativeInterface();
400 if (native->nativeResourceFunctionForContext("eglcontext")) {
402 } else if (native->nativeResourceFunctionForContext("glxcontext")) {
404 } else {
405 qWarning() << "WARNING: Failed to detect QXcbGlIntegration type!";
406 }
407 }
408#endif /* HAVE_X11 */
409
410 m_extensions = context.extensions();
411 // Remove empty name extension that sometimes appears on NVIDIA output
412 m_extensions.remove("");
413}
std::optional< KisOpenGL::XcbGLProviderProtocol > m_xcbGlProviderProtocol
#define GL_RENDERER

References GL_RENDERER, m_driverVersionString, m_extensions, m_format, m_glMajorVersion, m_glMinorVersion, m_isOpenGLES, m_rendererString, m_shadingLanguageString, m_supportsBufferInvalidation, m_supportsBufferMapping, m_supportsDeprecatedFunctions, m_supportsFBO, m_supportsLod, m_vendorString, m_xcbGlProviderProtocol, KisOpenGL::XCB_EGL, and KisOpenGL::XCB_GLX.

Member Function Documentation

◆ driverVersionString()

QString KisOpenGLModeProber::Result::driverVersionString ( ) const
inline

Definition at line 73 of file KisOpenGLModeProber.h.

73 {
75 }

References m_driverVersionString.

◆ extensions()

QSet< QByteArray > KisOpenGLModeProber::Result::extensions ( ) const
inline

Definition at line 147 of file KisOpenGLModeProber.h.

148 {
149 return m_extensions;
150 }

References m_extensions.

◆ format()

QSurfaceFormat KisOpenGLModeProber::Result::format ( ) const
inline

Definition at line 142 of file KisOpenGLModeProber.h.

143 {
144 return m_format;
145 }

References m_format.

◆ glMajorVersion()

int KisOpenGLModeProber::Result::glMajorVersion ( ) const
inline

Definition at line 53 of file KisOpenGLModeProber.h.

53 {
54 return m_glMajorVersion;
55 }

References m_glMajorVersion.

◆ glMinorVersion()

int KisOpenGLModeProber::Result::glMinorVersion ( ) const
inline

Definition at line 57 of file KisOpenGLModeProber.h.

57 {
58 return m_glMinorVersion;
59 }

References m_glMinorVersion.

◆ hasOpenGL3()

bool KisOpenGLModeProber::Result::hasOpenGL3 ( ) const
inline

Definition at line 104 of file KisOpenGLModeProber.h.

104 {
105 return (m_glMajorVersion * 100 + m_glMinorVersion) >= 302;
106 }

References m_glMajorVersion, and m_glMinorVersion.

◆ isOpenGLES()

bool KisOpenGLModeProber::Result::isOpenGLES ( ) const
inline

Definition at line 65 of file KisOpenGLModeProber.h.

65 {
66 return m_isOpenGLES;
67 }

References m_isOpenGLES.

◆ isSupportedVersion()

bool KisOpenGLModeProber::Result::isSupportedVersion ( ) const
inline

Definition at line 77 of file KisOpenGLModeProber.h.

77 {
78 // Technically we could support GLES2 (I added the extensions for
79 // floating point surfaces). But given that Dmitry required VAOs
80 // on GLES, I've kept the check mostly as-is.
81 // Note:
82 // - we've not supported OpenGL 2.1 for a Long time (commit e0d9a4feba0d4b5e70dddece8b76f38a6043fc88)
83 return (m_isOpenGLES && m_glMajorVersion >= 3) || ((m_glMajorVersion * 100 + m_glMinorVersion) >= 303);
84 }

References m_glMajorVersion, m_glMinorVersion, and m_isOpenGLES.

◆ rendererString()

QString KisOpenGLModeProber::Result::rendererString ( ) const
inline

Definition at line 69 of file KisOpenGLModeProber.h.

69 {
70 return m_rendererString;
71 }

References m_rendererString.

◆ shadingLanguageString()

QString KisOpenGLModeProber::Result::shadingLanguageString ( ) const
inline

Definition at line 132 of file KisOpenGLModeProber.h.

133 {
135 }

References m_shadingLanguageString.

◆ supportsBufferInvalidation()

bool KisOpenGLModeProber::Result::supportsBufferInvalidation ( ) const
inline

Definition at line 120 of file KisOpenGLModeProber.h.

120 {
122 }

References m_supportsBufferInvalidation.

◆ supportsBufferMapping()

bool KisOpenGLModeProber::Result::supportsBufferMapping ( ) const
inline

Definition at line 116 of file KisOpenGLModeProber.h.

116 {
118 }

References m_supportsBufferMapping.

◆ supportsDeprecatedFunctions()

bool KisOpenGLModeProber::Result::supportsDeprecatedFunctions ( ) const
inline

Definition at line 61 of file KisOpenGLModeProber.h.

61 {
63 }

References m_supportsDeprecatedFunctions.

◆ supportsFBO()

bool KisOpenGLModeProber::Result::supportsFBO ( ) const
inline

Definition at line 112 of file KisOpenGLModeProber.h.

112 {
113 return m_supportsFBO;
114 }

References m_supportsFBO.

◆ supportsFenceSync()

bool KisOpenGLModeProber::Result::supportsFenceSync ( ) const
inline

Definition at line 108 of file KisOpenGLModeProber.h.

108 {
109 return m_glMajorVersion >= 3;
110 }

References m_glMajorVersion.

◆ supportsLoD()

bool KisOpenGLModeProber::Result::supportsLoD ( ) const
inline

Definition at line 86 of file KisOpenGLModeProber.h.

86 {
87 return m_supportsLod;
88 }

References m_supportsLod.

◆ supportsVAO()

bool KisOpenGLModeProber::Result::supportsVAO ( ) const
inline

Theoretically, we could also test for ARB_vertex_array_object on openGL and OES_vertex_array_object on openGLES and enable this feature for openGL 2.1 as well. But we have no hardware to test if it really works in our code (our VAO code also uses buffers extensively), so we limit this feature to openGL/GLES 3.0 only.

Feel free to test it on the relevant hardware and enable it if needed.

Definition at line 90 of file KisOpenGLModeProber.h.

90 {
101 return (m_glMajorVersion * 100 + m_glMinorVersion) >= 300;
102 }

References m_glMajorVersion, and m_glMinorVersion.

◆ vendorString()

QString KisOpenGLModeProber::Result::vendorString ( ) const
inline

Definition at line 137 of file KisOpenGLModeProber.h.

138 {
139 return m_vendorString;
140 }

References m_vendorString.

◆ xcbGlProviderProtocol()

std::optional< KisOpenGL::XcbGLProviderProtocol > KisOpenGLModeProber::Result::xcbGlProviderProtocol ( )
inline

Definition at line 152 of file KisOpenGLModeProber.h.

152 {
154 }

References m_xcbGlProviderProtocol.

Member Data Documentation

◆ m_driverVersionString

QString KisOpenGLModeProber::Result::m_driverVersionString
private

Definition at line 166 of file KisOpenGLModeProber.h.

◆ m_extensions

QSet<QByteArray> KisOpenGLModeProber::Result::m_extensions
private

Definition at line 170 of file KisOpenGLModeProber.h.

◆ m_format

QSurfaceFormat KisOpenGLModeProber::Result::m_format
private

Definition at line 169 of file KisOpenGLModeProber.h.

◆ m_glMajorVersion

int KisOpenGLModeProber::Result::m_glMajorVersion = 0
private

Definition at line 157 of file KisOpenGLModeProber.h.

◆ m_glMinorVersion

int KisOpenGLModeProber::Result::m_glMinorVersion = 0
private

Definition at line 158 of file KisOpenGLModeProber.h.

◆ m_isOpenGLES

bool KisOpenGLModeProber::Result::m_isOpenGLES = false
private

Definition at line 160 of file KisOpenGLModeProber.h.

◆ m_rendererString

QString KisOpenGLModeProber::Result::m_rendererString
private

Definition at line 165 of file KisOpenGLModeProber.h.

◆ m_shadingLanguageString

QString KisOpenGLModeProber::Result::m_shadingLanguageString
private

Definition at line 168 of file KisOpenGLModeProber.h.

◆ m_supportsBufferInvalidation

bool KisOpenGLModeProber::Result::m_supportsBufferInvalidation = false
private

Definition at line 163 of file KisOpenGLModeProber.h.

◆ m_supportsBufferMapping

bool KisOpenGLModeProber::Result::m_supportsBufferMapping = false
private

Definition at line 162 of file KisOpenGLModeProber.h.

◆ m_supportsDeprecatedFunctions

bool KisOpenGLModeProber::Result::m_supportsDeprecatedFunctions = false
private

Definition at line 159 of file KisOpenGLModeProber.h.

◆ m_supportsFBO

bool KisOpenGLModeProber::Result::m_supportsFBO = false
private

Definition at line 161 of file KisOpenGLModeProber.h.

◆ m_supportsLod

bool KisOpenGLModeProber::Result::m_supportsLod = false
private

Definition at line 164 of file KisOpenGLModeProber.h.

◆ m_vendorString

QString KisOpenGLModeProber::Result::m_vendorString
private

Definition at line 167 of file KisOpenGLModeProber.h.

◆ m_xcbGlProviderProtocol

std::optional<KisOpenGL::XcbGLProviderProtocol> KisOpenGLModeProber::Result::m_xcbGlProviderProtocol
private

Definition at line 171 of file KisOpenGLModeProber.h.


The documentation for this class was generated from the following files: