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
 

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
 

Detailed Description

Definition at line 49 of file KisOpenGLModeProber.h.

Constructor & Destructor Documentation

◆ Result()

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

Definition at line 354 of file KisOpenGLModeProber.cpp.

354 {
355 if (!context.isValid()) {
356 return;
357 }
358
359 QOpenGLFunctions *funcs = context.functions(); // funcs is ready to be used
360
361 m_rendererString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_RENDERER)));
362 m_driverVersionString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_VERSION)));
363 m_vendorString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_VENDOR)));
364 m_shadingLanguageString = QString(reinterpret_cast<const char *>(funcs->glGetString(GL_SHADING_LANGUAGE_VERSION)));
365 m_glMajorVersion = context.format().majorVersion();
366 m_glMinorVersion = context.format().minorVersion();
367 m_supportsDeprecatedFunctions = (context.format().options() & QSurfaceFormat::DeprecatedFunctions);
368 m_isOpenGLES = context.isOpenGLES();
369 m_format = context.format();
370 m_supportsFBO = context.functions()->hasOpenGLFeature(QOpenGLFunctions::Framebuffers);
371
373 m_glMajorVersion >= 3 ||
374 context.hasExtension("GL_OES_mapbuffer") ||
375 context.hasExtension("GL_EXT_map_buffer_range") ||
376 context.hasExtension("GL_ARB_map_buffer_range");
377
379 ((m_glMajorVersion >= 4 && m_glMinorVersion >= 3) ||
380 context.hasExtension("GL_ARB_invalidate_subdata"));
381 m_supportsLod = context.format().majorVersion() >= 3 || (m_isOpenGLES && context.hasExtension("GL_EXT_shader_texture_lod"));
382
383 m_extensions = context.extensions();
384 // Remove empty name extension that sometimes appears on NVIDIA output
385 m_extensions.remove("");
386}
#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, and m_vendorString.

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.

Member Data Documentation

◆ m_driverVersionString

QString KisOpenGLModeProber::Result::m_driverVersionString
private

Definition at line 162 of file KisOpenGLModeProber.h.

◆ m_extensions

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

Definition at line 166 of file KisOpenGLModeProber.h.

◆ m_format

QSurfaceFormat KisOpenGLModeProber::Result::m_format
private

Definition at line 165 of file KisOpenGLModeProber.h.

◆ m_glMajorVersion

int KisOpenGLModeProber::Result::m_glMajorVersion = 0
private

Definition at line 153 of file KisOpenGLModeProber.h.

◆ m_glMinorVersion

int KisOpenGLModeProber::Result::m_glMinorVersion = 0
private

Definition at line 154 of file KisOpenGLModeProber.h.

◆ m_isOpenGLES

bool KisOpenGLModeProber::Result::m_isOpenGLES = false
private

Definition at line 156 of file KisOpenGLModeProber.h.

◆ m_rendererString

QString KisOpenGLModeProber::Result::m_rendererString
private

Definition at line 161 of file KisOpenGLModeProber.h.

◆ m_shadingLanguageString

QString KisOpenGLModeProber::Result::m_shadingLanguageString
private

Definition at line 164 of file KisOpenGLModeProber.h.

◆ m_supportsBufferInvalidation

bool KisOpenGLModeProber::Result::m_supportsBufferInvalidation = false
private

Definition at line 159 of file KisOpenGLModeProber.h.

◆ m_supportsBufferMapping

bool KisOpenGLModeProber::Result::m_supportsBufferMapping = false
private

Definition at line 158 of file KisOpenGLModeProber.h.

◆ m_supportsDeprecatedFunctions

bool KisOpenGLModeProber::Result::m_supportsDeprecatedFunctions = false
private

Definition at line 155 of file KisOpenGLModeProber.h.

◆ m_supportsFBO

bool KisOpenGLModeProber::Result::m_supportsFBO = false
private

Definition at line 157 of file KisOpenGLModeProber.h.

◆ m_supportsLod

bool KisOpenGLModeProber::Result::m_supportsLod = false
private

Definition at line 160 of file KisOpenGLModeProber.h.

◆ m_vendorString

QString KisOpenGLModeProber::Result::m_vendorString
private

Definition at line 163 of file KisOpenGLModeProber.h.


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