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::XcbGLProviderProtocolxcbGlProviderProtocol ()
 

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::XcbGLProviderProtocolm_xcbGlProviderProtocol
 

Detailed Description

Definition at line 49 of file KisOpenGLModeProber.h.

Constructor & Destructor Documentation

◆ Result()

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

Definition at line 358 of file KisOpenGLModeProber.cpp.

358 {
359 if (!context.isValid()) {
360 return;
361 }
362
363 QOpenGLFunctions *funcs = context.functions(); // funcs is ready to be used
364
365 m_rendererString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_RENDERER)));
366 m_driverVersionString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_VERSION)));
367 m_vendorString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_VENDOR)));
368 m_shadingLanguageString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_SHADING_LANGUAGE_VERSION)));
369 m_glMajorVersion = context.format().majorVersion();
370 m_glMinorVersion = context.format().minorVersion();
371 m_supportsDeprecatedFunctions = (context.format().options() & QSurfaceFormat::DeprecatedFunctions);
372 m_isOpenGLES = context.isOpenGLES();
373 m_format = context.format();
374 m_supportsFBO = context.functions()->hasOpenGLFeature(QOpenGLFunctions::Framebuffers);
375
377 m_glMajorVersion >= 3 ||
378 context.hasExtension("GL_OES_mapbuffer") ||
379 context.hasExtension("GL_EXT_map_buffer_range") ||
380 context.hasExtension("GL_ARB_map_buffer_range");
381
383 ((m_glMajorVersion >= 4 && m_glMinorVersion >= 3) ||
384 context.hasExtension("GL_ARB_invalidate_subdata"));
385 m_supportsLod = context.format().majorVersion() >= 3 || (m_isOpenGLES && context.hasExtension("GL_EXT_shader_texture_lod"));
386
387#ifdef HAVE_X11
388 if (QApplication::platformName() == "xcb") {
389 QPlatformNativeInterface *native = qApp->platformNativeInterface();
390 if (native->nativeResourceFunctionForContext("eglcontext")) {
392 } else if (native->nativeResourceFunctionForContext("glxcontext")) {
394 } else {
395 qWarning() << "WARNING: Failed to detect QXcbGlIntegration type!";
396 }
397 }
398#endif /* HAVE_X11 */
399
400 m_extensions = context.extensions();
401 // Remove empty name extension that sometimes appears on NVIDIA output
402 m_extensions.remove("");
403}
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: