| Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/gui/opengl/qopenglfunctions.cpp |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||
| 2 | - | |||||||||||||
| 3 | const QLoggingCategory &lcGLES3() { static const QLoggingCategory category("qt.opengl.es3"); return never executed: category;return category;never executed: }return category; | 0 | ||||||||||||
| 4 | struct QOpenGLFunctionsPrivateEx : public QOpenGLExtensionsPrivate, public QOpenGLSharedResource | - | ||||||||||||
| 5 | { | - | ||||||||||||
| 6 | QOpenGLFunctionsPrivateEx(QOpenGLContext *context) | - | ||||||||||||
| 7 | : QOpenGLExtensionsPrivate(context) | - | ||||||||||||
| 8 | , QOpenGLSharedResource(context->shareGroup()) | - | ||||||||||||
| 9 | , m_features(-1) | - | ||||||||||||
| 10 | , m_extensions(-1) | - | ||||||||||||
| 11 | {} never executed: end of block | 0 | ||||||||||||
| 12 | - | |||||||||||||
| 13 | void invalidateResource() override | - | ||||||||||||
| 14 | { | - | ||||||||||||
| 15 | m_features = -1; | - | ||||||||||||
| 16 | m_extensions = -1; | - | ||||||||||||
| 17 | } never executed: end of block | 0 | ||||||||||||
| 18 | - | |||||||||||||
| 19 | void freeResource(QOpenGLContext *) override | - | ||||||||||||
| 20 | { | - | ||||||||||||
| 21 | - | |||||||||||||
| 22 | } | - | ||||||||||||
| 23 | - | |||||||||||||
| 24 | int m_features; | - | ||||||||||||
| 25 | int m_extensions; | - | ||||||||||||
| 26 | }; | - | ||||||||||||
| 27 | - | |||||||||||||
| 28 | namespace { namespace Q_QGS_qt_gl_functions_resource { typedef QOpenGLMultiGroupSharedResource Type; QBasicAtomicInt guard = { QtGlobalStatic::Uninitialized }; __attribute__((visibility("hidden"))) inline Type *innerFunction() { struct HolderBase { ~HolderBase() noexcept { if (guard.load() == QtGlobalStatic::Initialized
never executed: }guard.store(QtGlobalStatic::Destroyed);never executed: }; static struct Holder : public HolderBase { Type value; Holder() noexcept(noexcept(Type ())) : value () { guard.store(QtGlobalStatic::Initialized); } } holder; returnend of blocknever executed: &holder.value;return &holder.value;never executed: } } } static QGlobalStatic<QOpenGLMultiGroupSharedResource, Q_QGS_qt_gl_functions_resource::innerFunction, Q_QGS_qt_gl_functions_resource::guard> qt_gl_functions_resource;return &holder.value; | 0 | ||||||||||||
| 29 | - | |||||||||||||
| 30 | static QOpenGLFunctionsPrivateEx *qt_gl_functions(QOpenGLContext *context = 0) | - | ||||||||||||
| 31 | { | - | ||||||||||||
| 32 | if (!context
| 0 | ||||||||||||
| 33 | context = QOpenGLContext::currentContext(); never executed: context = QOpenGLContext::currentContext(); | 0 | ||||||||||||
| 34 | ((!(context)) ? qt_assert("context",__FILE__,244) : qt_noop()); | - | ||||||||||||
| 35 | QOpenGLFunctionsPrivateEx *funcs = | - | ||||||||||||
| 36 | qt_gl_functions_resource()->value<QOpenGLFunctionsPrivateEx>(context); | - | ||||||||||||
| 37 | return never executed: funcs;return funcs;never executed: return funcs; | 0 | ||||||||||||
| 38 | } | - | ||||||||||||
| 39 | QOpenGLFunctions::QOpenGLFunctions() | - | ||||||||||||
| 40 | : d_ptr(0) | - | ||||||||||||
| 41 | { | - | ||||||||||||
| 42 | } never executed: end of block | 0 | ||||||||||||
| 43 | QOpenGLFunctions::QOpenGLFunctions(QOpenGLContext *context) | - | ||||||||||||
| 44 | : d_ptr(0) | - | ||||||||||||
| 45 | { | - | ||||||||||||
| 46 | if (context
| 0 | ||||||||||||
| 47 | d_ptr = qt_gl_functions(context); never executed: d_ptr = qt_gl_functions(context); | 0 | ||||||||||||
| 48 | else | - | ||||||||||||
| 49 | QMessageLogger(__FILE__, 280, __PRETTY_FUNCTION__).warning("QOpenGLFunctions created with non-current context"); never executed: QMessageLogger(__FILE__, 280, __PRETTY_FUNCTION__).warning("QOpenGLFunctions created with non-current context"); | 0 | ||||||||||||
| 50 | } | - | ||||||||||||
| 51 | - | |||||||||||||
| 52 | QOpenGLExtensions::QOpenGLExtensions() | - | ||||||||||||
| 53 | { | - | ||||||||||||
| 54 | } | - | ||||||||||||
| 55 | - | |||||||||||||
| 56 | QOpenGLExtensions::QOpenGLExtensions(QOpenGLContext *context) | - | ||||||||||||
| 57 | : QOpenGLExtraFunctions(context) | - | ||||||||||||
| 58 | { | - | ||||||||||||
| 59 | } never executed: end of block | 0 | ||||||||||||
| 60 | - | |||||||||||||
| 61 | - | |||||||||||||
| 62 | - | |||||||||||||
| 63 | - | |||||||||||||
| 64 | - | |||||||||||||
| 65 | - | |||||||||||||
| 66 | - | |||||||||||||
| 67 | static int qt_gl_resolve_features() | - | ||||||||||||
| 68 | { | - | ||||||||||||
| 69 | QOpenGLContext *ctx = QOpenGLContext::currentContext(); | - | ||||||||||||
| 70 | if (ctx->isOpenGLES()
| 0 | ||||||||||||
| 71 | - | |||||||||||||
| 72 | int features = QOpenGLFunctions::Multitexture | | - | ||||||||||||
| 73 | QOpenGLFunctions::Shaders | | - | ||||||||||||
| 74 | QOpenGLFunctions::Buffers | | - | ||||||||||||
| 75 | QOpenGLFunctions::Framebuffers | | - | ||||||||||||
| 76 | QOpenGLFunctions::BlendColor | | - | ||||||||||||
| 77 | QOpenGLFunctions::BlendEquation | | - | ||||||||||||
| 78 | QOpenGLFunctions::BlendEquationSeparate | | - | ||||||||||||
| 79 | QOpenGLFunctions::BlendFuncSeparate | | - | ||||||||||||
| 80 | QOpenGLFunctions::BlendSubtract | | - | ||||||||||||
| 81 | QOpenGLFunctions::CompressedTextures | | - | ||||||||||||
| 82 | QOpenGLFunctions::Multisample | | - | ||||||||||||
| 83 | QOpenGLFunctions::StencilSeparate; | - | ||||||||||||
| 84 | QOpenGLExtensionMatcher extensions; | - | ||||||||||||
| 85 | if (extensions.match("GL_IMG_texture_npot")
| 0 | ||||||||||||
| 86 | features |= QOpenGLFunctions::NPOTTextures; never executed: features |= QOpenGLFunctions::NPOTTextures; | 0 | ||||||||||||
| 87 | if (extensions.match("GL_OES_texture_npot")
| 0 | ||||||||||||
| 88 | features |= QOpenGLFunctions::NPOTTextures | never executed: features |= QOpenGLFunctions::NPOTTextures | QOpenGLFunctions::NPOTTextureRepeat; | 0 | ||||||||||||
| 89 | QOpenGLFunctions::NPOTTextureRepeat; never executed: features |= QOpenGLFunctions::NPOTTextures | QOpenGLFunctions::NPOTTextureRepeat; | 0 | ||||||||||||
| 90 | if (ctx->format().majorVersion() >= 3
| 0 | ||||||||||||
| 91 | - | |||||||||||||
| 92 | const char *renderer = reinterpret_cast<const char *>(ctx->functions()->glGetString(0x1F01)); | - | ||||||||||||
| 93 | if (!(renderer
| 0 | ||||||||||||
| 94 | features |= QOpenGLFunctions::TextureRGFormats; never executed: features |= QOpenGLFunctions::TextureRGFormats; | 0 | ||||||||||||
| 95 | } never executed: end of block | 0 | ||||||||||||
| 96 | if (ctx->format().majorVersion() >= 3
| 0 | ||||||||||||
| 97 | features |= QOpenGLFunctions::MultipleRenderTargets; never executed: features |= QOpenGLFunctions::MultipleRenderTargets; | 0 | ||||||||||||
| 98 | return never executed: features;return features;never executed: return features; | 0 | ||||||||||||
| 99 | } else { | - | ||||||||||||
| 100 | - | |||||||||||||
| 101 | int features = QOpenGLFunctions::TextureRGFormats; | - | ||||||||||||
| 102 | QSurfaceFormat format = QOpenGLContext::currentContext()->format(); | - | ||||||||||||
| 103 | QOpenGLExtensionMatcher extensions; | - | ||||||||||||
| 104 | - | |||||||||||||
| 105 | if (format.majorVersion() >= 3
| 0 | ||||||||||||
| 106 | features |= QOpenGLFunctions::Framebuffers | QOpenGLFunctions::MultipleRenderTargets; never executed: features |= QOpenGLFunctions::Framebuffers | QOpenGLFunctions::MultipleRenderTargets; | 0 | ||||||||||||
| 107 | else if (extensions.match("GL_EXT_framebuffer_object")
| 0 | ||||||||||||
| 108 | features |= QOpenGLFunctions::Framebuffers | QOpenGLFunctions::MultipleRenderTargets; never executed: features |= QOpenGLFunctions::Framebuffers | QOpenGLFunctions::MultipleRenderTargets; | 0 | ||||||||||||
| 109 | - | |||||||||||||
| 110 | if (format.majorVersion() >= 2
| 0 | ||||||||||||
| 111 | features |= QOpenGLFunctions::BlendColor | | - | ||||||||||||
| 112 | QOpenGLFunctions::BlendEquation | | - | ||||||||||||
| 113 | QOpenGLFunctions::BlendSubtract | | - | ||||||||||||
| 114 | QOpenGLFunctions::Multitexture | | - | ||||||||||||
| 115 | QOpenGLFunctions::CompressedTextures | | - | ||||||||||||
| 116 | QOpenGLFunctions::Multisample | | - | ||||||||||||
| 117 | QOpenGLFunctions::BlendFuncSeparate | | - | ||||||||||||
| 118 | QOpenGLFunctions::Buffers | | - | ||||||||||||
| 119 | QOpenGLFunctions::Shaders | | - | ||||||||||||
| 120 | QOpenGLFunctions::StencilSeparate | | - | ||||||||||||
| 121 | QOpenGLFunctions::BlendEquationSeparate | | - | ||||||||||||
| 122 | QOpenGLFunctions::NPOTTextures | | - | ||||||||||||
| 123 | QOpenGLFunctions::NPOTTextureRepeat; | - | ||||||||||||
| 124 | } never executed: else {end of block | 0 | ||||||||||||
| 125 | - | |||||||||||||
| 126 | if (extensions.match("GL_ARB_multitexture")
| 0 | ||||||||||||
| 127 | features |= QOpenGLFunctions::Multitexture; never executed: features |= QOpenGLFunctions::Multitexture; | 0 | ||||||||||||
| 128 | if (extensions.match("GL_ARB_shader_objects")
| 0 | ||||||||||||
| 129 | features |= QOpenGLFunctions::Shaders; never executed: features |= QOpenGLFunctions::Shaders; | 0 | ||||||||||||
| 130 | if (extensions.match("GL_EXT_blend_color")
| 0 | ||||||||||||
| 131 | features |= QOpenGLFunctions::BlendColor; never executed: features |= QOpenGLFunctions::BlendColor; | 0 | ||||||||||||
| 132 | if (extensions.match("GL_EXT_blend_equation_separate")
| 0 | ||||||||||||
| 133 | features |= QOpenGLFunctions::BlendEquationSeparate; never executed: features |= QOpenGLFunctions::BlendEquationSeparate; | 0 | ||||||||||||
| 134 | if (extensions.match("GL_EXT_blend_subtract")
| 0 | ||||||||||||
| 135 | features |= QOpenGLFunctions::BlendSubtract; never executed: features |= QOpenGLFunctions::BlendSubtract; | 0 | ||||||||||||
| 136 | if (extensions.match("GL_EXT_blend_func_separate")
| 0 | ||||||||||||
| 137 | features |= QOpenGLFunctions::BlendFuncSeparate; never executed: features |= QOpenGLFunctions::BlendFuncSeparate; | 0 | ||||||||||||
| 138 | if (extensions.match("GL_ARB_texture_compression")
| 0 | ||||||||||||
| 139 | features |= QOpenGLFunctions::CompressedTextures; never executed: features |= QOpenGLFunctions::CompressedTextures; | 0 | ||||||||||||
| 140 | if (extensions.match("GL_ARB_multisample")
| 0 | ||||||||||||
| 141 | features |= QOpenGLFunctions::Multisample; never executed: features |= QOpenGLFunctions::Multisample; | 0 | ||||||||||||
| 142 | if (extensions.match("GL_ARB_texture_non_power_of_two")
| 0 | ||||||||||||
| 143 | features |= QOpenGLFunctions::NPOTTextures | never executed: features |= QOpenGLFunctions::NPOTTextures | QOpenGLFunctions::NPOTTextureRepeat; | 0 | ||||||||||||
| 144 | QOpenGLFunctions::NPOTTextureRepeat; never executed: features |= QOpenGLFunctions::NPOTTextures | QOpenGLFunctions::NPOTTextureRepeat; | 0 | ||||||||||||
| 145 | } never executed: end of block | 0 | ||||||||||||
| 146 | - | |||||||||||||
| 147 | const QPair<int, int> version = format.version(); | - | ||||||||||||
| 148 | if (version < qMakePair(3, 0)
| 0 | ||||||||||||
| 149 | || (version == qMakePair(3, 0)
| 0 | ||||||||||||
| 150 | || (version == qMakePair(3, 1)
| 0 | ||||||||||||
| 151 | || (version >= qMakePair(3, 2)
| 0 | ||||||||||||
| 152 | features |= QOpenGLFunctions::FixedFunctionPipeline; | - | ||||||||||||
| 153 | } never executed: end of block | 0 | ||||||||||||
| 154 | return never executed: features;return features;never executed: return features; | 0 | ||||||||||||
| 155 | } | - | ||||||||||||
| 156 | } | - | ||||||||||||
| 157 | - | |||||||||||||
| 158 | static int qt_gl_resolve_extensions() | - | ||||||||||||
| 159 | { | - | ||||||||||||
| 160 | int extensions = 0; | - | ||||||||||||
| 161 | QOpenGLExtensionMatcher extensionMatcher; | - | ||||||||||||
| 162 | QOpenGLContext *ctx = QOpenGLContext::currentContext(); | - | ||||||||||||
| 163 | QSurfaceFormat format = ctx->format(); | - | ||||||||||||
| 164 | - | |||||||||||||
| 165 | if (extensionMatcher.match("GL_EXT_bgra")
| 0 | ||||||||||||
| 166 | extensions |= QOpenGLExtensions::BGRATextureFormat; never executed: extensions |= QOpenGLExtensions::BGRATextureFormat; | 0 | ||||||||||||
| 167 | if (extensionMatcher.match("GL_ARB_texture_rectangle")
| 0 | ||||||||||||
| 168 | extensions |= QOpenGLExtensions::TextureRectangle; never executed: extensions |= QOpenGLExtensions::TextureRectangle; | 0 | ||||||||||||
| 169 | if (extensionMatcher.match("GL_ARB_texture_compression")
| 0 | ||||||||||||
| 170 | extensions |= QOpenGLExtensions::TextureCompression; never executed: extensions |= QOpenGLExtensions::TextureCompression; | 0 | ||||||||||||
| 171 | if (extensionMatcher.match("GL_EXT_texture_compression_s3tc")
| 0 | ||||||||||||
| 172 | extensions |= QOpenGLExtensions::DDSTextureCompression; never executed: extensions |= QOpenGLExtensions::DDSTextureCompression; | 0 | ||||||||||||
| 173 | if (extensionMatcher.match("GL_OES_compressed_ETC1_RGB8_texture")
| 0 | ||||||||||||
| 174 | extensions |= QOpenGLExtensions::ETC1TextureCompression; never executed: extensions |= QOpenGLExtensions::ETC1TextureCompression; | 0 | ||||||||||||
| 175 | if (extensionMatcher.match("GL_IMG_texture_compression_pvrtc")
| 0 | ||||||||||||
| 176 | extensions |= QOpenGLExtensions::PVRTCTextureCompression; never executed: extensions |= QOpenGLExtensions::PVRTCTextureCompression; | 0 | ||||||||||||
| 177 | if (extensionMatcher.match("GL_ARB_texture_mirrored_repeat")
| 0 | ||||||||||||
| 178 | extensions |= QOpenGLExtensions::MirroredRepeat; never executed: extensions |= QOpenGLExtensions::MirroredRepeat; | 0 | ||||||||||||
| 179 | if (extensionMatcher.match("GL_EXT_stencil_two_side")
| 0 | ||||||||||||
| 180 | extensions |= QOpenGLExtensions::StencilTwoSide; never executed: extensions |= QOpenGLExtensions::StencilTwoSide; | 0 | ||||||||||||
| 181 | if (extensionMatcher.match("GL_EXT_stencil_wrap")
| 0 | ||||||||||||
| 182 | extensions |= QOpenGLExtensions::StencilWrap; never executed: extensions |= QOpenGLExtensions::StencilWrap; | 0 | ||||||||||||
| 183 | if (extensionMatcher.match("GL_NV_float_buffer")
| 0 | ||||||||||||
| 184 | extensions |= QOpenGLExtensions::NVFloatBuffer; never executed: extensions |= QOpenGLExtensions::NVFloatBuffer; | 0 | ||||||||||||
| 185 | if (extensionMatcher.match("GL_ARB_pixel_buffer_object")
| 0 | ||||||||||||
| 186 | extensions |= QOpenGLExtensions::PixelBufferObject; never executed: extensions |= QOpenGLExtensions::PixelBufferObject; | 0 | ||||||||||||
| 187 | - | |||||||||||||
| 188 | if (ctx->isOpenGLES()
| 0 | ||||||||||||
| 189 | if (format.majorVersion() >= 2
| 0 | ||||||||||||
| 190 | extensions |= QOpenGLExtensions::GenerateMipmap; never executed: extensions |= QOpenGLExtensions::GenerateMipmap; | 0 | ||||||||||||
| 191 | - | |||||||||||||
| 192 | if (format.majorVersion() >= 3
| 0 | ||||||||||||
| 193 | extensions |= QOpenGLExtensions::PackedDepthStencil | - | ||||||||||||
| 194 | | QOpenGLExtensions::Depth24 | - | ||||||||||||
| 195 | | QOpenGLExtensions::ElementIndexUint | - | ||||||||||||
| 196 | | QOpenGLExtensions::MapBufferRange | - | ||||||||||||
| 197 | | QOpenGLExtensions::FramebufferBlit | - | ||||||||||||
| 198 | | QOpenGLExtensions::FramebufferMultisample | - | ||||||||||||
| 199 | | QOpenGLExtensions::Sized8Formats; | - | ||||||||||||
| 200 | } never executed: else {end of block | 0 | ||||||||||||
| 201 | - | |||||||||||||
| 202 | if (extensionMatcher.match("GL_OES_packed_depth_stencil")
| 0 | ||||||||||||
| 203 | extensions |= QOpenGLExtensions::PackedDepthStencil; never executed: extensions |= QOpenGLExtensions::PackedDepthStencil; | 0 | ||||||||||||
| 204 | if (extensionMatcher.match("GL_OES_depth24")
| 0 | ||||||||||||
| 205 | extensions |= QOpenGLExtensions::Depth24; never executed: extensions |= QOpenGLExtensions::Depth24; | 0 | ||||||||||||
| 206 | if (extensionMatcher.match("GL_ANGLE_framebuffer_blit")
| 0 | ||||||||||||
| 207 | extensions |= QOpenGLExtensions::FramebufferBlit; never executed: extensions |= QOpenGLExtensions::FramebufferBlit; | 0 | ||||||||||||
| 208 | if (extensionMatcher.match("GL_ANGLE_framebuffer_multisample")
| 0 | ||||||||||||
| 209 | extensions |= QOpenGLExtensions::FramebufferMultisample; never executed: extensions |= QOpenGLExtensions::FramebufferMultisample; | 0 | ||||||||||||
| 210 | if (extensionMatcher.match("GL_NV_framebuffer_blit")
| 0 | ||||||||||||
| 211 | extensions |= QOpenGLExtensions::FramebufferBlit; never executed: extensions |= QOpenGLExtensions::FramebufferBlit; | 0 | ||||||||||||
| 212 | if (extensionMatcher.match("GL_NV_framebuffer_multisample")
| 0 | ||||||||||||
| 213 | extensions |= QOpenGLExtensions::FramebufferMultisample; never executed: extensions |= QOpenGLExtensions::FramebufferMultisample; | 0 | ||||||||||||
| 214 | if (extensionMatcher.match("GL_OES_rgb8_rgba8")
| 0 | ||||||||||||
| 215 | extensions |= QOpenGLExtensions::Sized8Formats; never executed: extensions |= QOpenGLExtensions::Sized8Formats; | 0 | ||||||||||||
| 216 | } never executed: end of block | 0 | ||||||||||||
| 217 | - | |||||||||||||
| 218 | if (extensionMatcher.match("GL_OES_mapbuffer")
| 0 | ||||||||||||
| 219 | extensions |= QOpenGLExtensions::MapBuffer; never executed: extensions |= QOpenGLExtensions::MapBuffer; | 0 | ||||||||||||
| 220 | if (extensionMatcher.match("GL_OES_element_index_uint")
| 0 | ||||||||||||
| 221 | extensions |= QOpenGLExtensions::ElementIndexUint; never executed: extensions |= QOpenGLExtensions::ElementIndexUint; | 0 | ||||||||||||
| 222 | - | |||||||||||||
| 223 | if (extensionMatcher.match("GL_IMG_texture_format_BGRA8888")
| 0 | ||||||||||||
| 224 | extensions |= QOpenGLExtensions::BGRATextureFormat; never executed: extensions |= QOpenGLExtensions::BGRATextureFormat; | 0 | ||||||||||||
| 225 | if (extensionMatcher.match("GL_EXT_discard_framebuffer")
| 0 | ||||||||||||
| 226 | extensions |= QOpenGLExtensions::DiscardFramebuffer; never executed: extensions |= QOpenGLExtensions::DiscardFramebuffer; | 0 | ||||||||||||
| 227 | if (extensionMatcher.match("GL_EXT_texture_norm16")
| 0 | ||||||||||||
| 228 | extensions |= QOpenGLExtensions::Sized16Formats; never executed: extensions |= QOpenGLExtensions::Sized16Formats; | 0 | ||||||||||||
| 229 | } never executed: else {end of block | 0 | ||||||||||||
| 230 | extensions |= QOpenGLExtensions::ElementIndexUint | - | ||||||||||||
| 231 | | QOpenGLExtensions::MapBuffer | - | ||||||||||||
| 232 | | QOpenGLExtensions::Sized16Formats; | - | ||||||||||||
| 233 | - | |||||||||||||
| 234 | if (format.version() >= qMakePair(1, 2)
| 0 | ||||||||||||
| 235 | extensions |= QOpenGLExtensions::BGRATextureFormat; never executed: extensions |= QOpenGLExtensions::BGRATextureFormat; | 0 | ||||||||||||
| 236 | - | |||||||||||||
| 237 | if (format.version() >= qMakePair(1, 4)
| 0 | ||||||||||||
| 238 | extensions |= QOpenGLExtensions::GenerateMipmap; never executed: extensions |= QOpenGLExtensions::GenerateMipmap; | 0 | ||||||||||||
| 239 | - | |||||||||||||
| 240 | if (format.majorVersion() >= 3
| 0 | ||||||||||||
| 241 | extensions |= QOpenGLExtensions::FramebufferMultisample | - | ||||||||||||
| 242 | | QOpenGLExtensions::FramebufferBlit | - | ||||||||||||
| 243 | | QOpenGLExtensions::PackedDepthStencil | - | ||||||||||||
| 244 | | QOpenGLExtensions::Sized8Formats; | - | ||||||||||||
| 245 | } never executed: else {end of block | 0 | ||||||||||||
| 246 | - | |||||||||||||
| 247 | if (extensionMatcher.match("GL_EXT_framebuffer_multisample")
| 0 | ||||||||||||
| 248 | extensions |= QOpenGLExtensions::FramebufferMultisample; never executed: extensions |= QOpenGLExtensions::FramebufferMultisample; | 0 | ||||||||||||
| 249 | if (extensionMatcher.match("GL_EXT_framebuffer_blit")
| 0 | ||||||||||||
| 250 | extensions |= QOpenGLExtensions::FramebufferBlit; never executed: extensions |= QOpenGLExtensions::FramebufferBlit; | 0 | ||||||||||||
| 251 | if (extensionMatcher.match("GL_EXT_packed_depth_stencil")
| 0 | ||||||||||||
| 252 | extensions |= QOpenGLExtensions::PackedDepthStencil; never executed: extensions |= QOpenGLExtensions::PackedDepthStencil; | 0 | ||||||||||||
| 253 | } never executed: end of block | 0 | ||||||||||||
| 254 | - | |||||||||||||
| 255 | if (format.version() >= qMakePair(3, 2)
| 0 | ||||||||||||
| 256 | extensions |= QOpenGLExtensions::GeometryShaders; never executed: extensions |= QOpenGLExtensions::GeometryShaders; | 0 | ||||||||||||
| 257 | - | |||||||||||||
| 258 | if (extensionMatcher.match("GL_ARB_map_buffer_range")
| 0 | ||||||||||||
| 259 | extensions |= QOpenGLExtensions::MapBufferRange; never executed: extensions |= QOpenGLExtensions::MapBufferRange; | 0 | ||||||||||||
| 260 | - | |||||||||||||
| 261 | if (extensionMatcher.match("GL_EXT_framebuffer_sRGB")
| 0 | ||||||||||||
| 262 | GLboolean srgbCapableFramebuffers = false; | - | ||||||||||||
| 263 | ctx->functions()->glGetBooleanv(0x8DBA, &srgbCapableFramebuffers); | - | ||||||||||||
| 264 | if (srgbCapableFramebuffers
| 0 | ||||||||||||
| 265 | extensions |= QOpenGLExtensions::SRGBFrameBuffer; never executed: extensions |= QOpenGLExtensions::SRGBFrameBuffer; | 0 | ||||||||||||
| 266 | } never executed: end of block | 0 | ||||||||||||
| 267 | } never executed: end of block | 0 | ||||||||||||
| 268 | - | |||||||||||||
| 269 | return never executed: extensions;return extensions;never executed: return extensions; | 0 | ||||||||||||
| 270 | } | - | ||||||||||||
| 271 | QOpenGLFunctions::OpenGLFeatures QOpenGLFunctions::openGLFeatures() const | - | ||||||||||||
| 272 | { | - | ||||||||||||
| 273 | QOpenGLFunctionsPrivateEx *d = static_cast<QOpenGLFunctionsPrivateEx *>(d_ptr); | - | ||||||||||||
| 274 | if (!d
| 0 | ||||||||||||
| 275 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 276 | if (d->m_features == -1
| 0 | ||||||||||||
| 277 | d->m_features = qt_gl_resolve_features(); never executed: d->m_features = qt_gl_resolve_features(); | 0 | ||||||||||||
| 278 | return never executed: QOpenGLFunctions::OpenGLFeatures(d->m_features);return QOpenGLFunctions::OpenGLFeatures(d->m_features);never executed: return QOpenGLFunctions::OpenGLFeatures(d->m_features); | 0 | ||||||||||||
| 279 | } | - | ||||||||||||
| 280 | bool QOpenGLFunctions::hasOpenGLFeature(QOpenGLFunctions::OpenGLFeature feature) const | - | ||||||||||||
| 281 | { | - | ||||||||||||
| 282 | QOpenGLFunctionsPrivateEx *d = static_cast<QOpenGLFunctionsPrivateEx *>(d_ptr); | - | ||||||||||||
| 283 | if (!d
| 0 | ||||||||||||
| 284 | return never executed: false;return false;never executed: return false; | 0 | ||||||||||||
| 285 | if (d->m_features == -1
| 0 | ||||||||||||
| 286 | d->m_features = qt_gl_resolve_features(); never executed: d->m_features = qt_gl_resolve_features(); | 0 | ||||||||||||
| 287 | return never executed: (d->m_features & int(feature)) != 0;return (d->m_features & int(feature)) != 0;never executed: return (d->m_features & int(feature)) != 0; | 0 | ||||||||||||
| 288 | } | - | ||||||||||||
| 289 | QOpenGLExtensions::OpenGLExtensions QOpenGLExtensions::openGLExtensions() | - | ||||||||||||
| 290 | { | - | ||||||||||||
| 291 | QOpenGLFunctionsPrivateEx *d = static_cast<QOpenGLFunctionsPrivateEx *>(d_ptr); | - | ||||||||||||
| 292 | if (!d
| 0 | ||||||||||||
| 293 | return never executed: 0;return 0;never executed: return 0; | 0 | ||||||||||||
| 294 | if (d->m_extensions == -1
| 0 | ||||||||||||
| 295 | d->m_extensions = qt_gl_resolve_extensions(); never executed: d->m_extensions = qt_gl_resolve_extensions(); | 0 | ||||||||||||
| 296 | return never executed: QOpenGLExtensions::OpenGLExtensions(d->m_extensions);return QOpenGLExtensions::OpenGLExtensions(d->m_extensions);never executed: return QOpenGLExtensions::OpenGLExtensions(d->m_extensions); | 0 | ||||||||||||
| 297 | } | - | ||||||||||||
| 298 | bool QOpenGLExtensions::hasOpenGLExtension(QOpenGLExtensions::OpenGLExtension extension) const | - | ||||||||||||
| 299 | { | - | ||||||||||||
| 300 | QOpenGLFunctionsPrivateEx *d = static_cast<QOpenGLFunctionsPrivateEx *>(d_ptr); | - | ||||||||||||
| 301 | if (!d
| 0 | ||||||||||||
| 302 | return never executed: false;return false;never executed: return false; | 0 | ||||||||||||
| 303 | if (d->m_extensions == -1
| 0 | ||||||||||||
| 304 | d->m_extensions = qt_gl_resolve_extensions(); never executed: d->m_extensions = qt_gl_resolve_extensions(); | 0 | ||||||||||||
| 305 | return never executed: (d->m_extensions & int(extension)) != 0;return (d->m_extensions & int(extension)) != 0;never executed: return (d->m_extensions & int(extension)) != 0; | 0 | ||||||||||||
| 306 | } | - | ||||||||||||
| 307 | void QOpenGLFunctions::initializeOpenGLFunctions() | - | ||||||||||||
| 308 | { | - | ||||||||||||
| 309 | d_ptr = qt_gl_functions(); | - | ||||||||||||
| 310 | } never executed: end of block | 0 | ||||||||||||
| 311 | namespace { | - | ||||||||||||
| 312 | - | |||||||||||||
| 313 | - | |||||||||||||
| 314 | - | |||||||||||||
| 315 | - | |||||||||||||
| 316 | static QFunctionPointer getProcAddress(QOpenGLContext *context, const char *funcName) | - | ||||||||||||
| 317 | { | - | ||||||||||||
| 318 | QFunctionPointer function = context->getProcAddress(funcName); | - | ||||||||||||
| 319 | - | |||||||||||||
| 320 | static const struct { | - | ||||||||||||
| 321 | const char *name; | - | ||||||||||||
| 322 | int len; | - | ||||||||||||
| 323 | } extensions[] = { | - | ||||||||||||
| 324 | { "ARB", 4 }, | - | ||||||||||||
| 325 | { "OES", 4 }, | - | ||||||||||||
| 326 | { "EXT", 4 }, | - | ||||||||||||
| 327 | { "ANGLE", 6 }, | - | ||||||||||||
| 328 | { "NV", 3 }, | - | ||||||||||||
| 329 | }; | - | ||||||||||||
| 330 | - | |||||||||||||
| 331 | if (!function
| 0 | ||||||||||||
| 332 | char fn[512]; | - | ||||||||||||
| 333 | size_t size = strlen(funcName); | - | ||||||||||||
| 334 | ((!(size < 500)) ? qt_assert("size < 500",__FILE__,2126) : qt_noop()); | - | ||||||||||||
| 335 | memcpy(fn, funcName, size); | - | ||||||||||||
| 336 | char *ext = fn + size; | - | ||||||||||||
| 337 | - | |||||||||||||
| 338 | for (const auto &e : extensions) { | - | ||||||||||||
| 339 | memcpy(ext, e.name, e.len); | - | ||||||||||||
| 340 | function = context->getProcAddress(fn); | - | ||||||||||||
| 341 | if (function
| 0 | ||||||||||||
| 342 | break; never executed: break; | 0 | ||||||||||||
| 343 | } never executed: end of block | 0 | ||||||||||||
| 344 | } never executed: end of block | 0 | ||||||||||||
| 345 | - | |||||||||||||
| 346 | return never executed: function;return function;never executed: return function; | 0 | ||||||||||||
| 347 | } | - | ||||||||||||
| 348 | - | |||||||||||||
| 349 | template <typename Func> | - | ||||||||||||
| 350 | Func resolve(QOpenGLContext *context, const char *name, Func) | - | ||||||||||||
| 351 | { | - | ||||||||||||
| 352 | return never executed: reinterpret_cast<Func>(getProcAddress(context, name));return reinterpret_cast<Func>(getProcAddress(context, name));never executed: return reinterpret_cast<Func>(getProcAddress(context, name)); | 0 | ||||||||||||
| 353 | } | - | ||||||||||||
| 354 | - | |||||||||||||
| 355 | } | - | ||||||||||||
| 356 | - | |||||||||||||
| 357 | - | |||||||||||||
| 358 | - | |||||||||||||
| 359 | - | |||||||||||||
| 360 | - | |||||||||||||
| 361 | - | |||||||||||||
| 362 | - | |||||||||||||
| 363 | static void qopenglfSpecialClearDepthf(GLclampf depth) | - | ||||||||||||
| 364 | { | - | ||||||||||||
| 365 | QOpenGLContext *context = QOpenGLContext::currentContext(); | - | ||||||||||||
| 366 | QOpenGLFunctionsPrivate *funcs = qt_gl_functions(context); | - | ||||||||||||
| 367 | funcs->f.ClearDepth((GLdouble) depth); | - | ||||||||||||
| 368 | } never executed: end of block | 0 | ||||||||||||
| 369 | - | |||||||||||||
| 370 | static void qopenglfSpecialDepthRangef(GLclampf zNear, GLclampf zFar) | - | ||||||||||||
| 371 | { | - | ||||||||||||
| 372 | QOpenGLContext *context = QOpenGLContext::currentContext(); | - | ||||||||||||
| 373 | QOpenGLFunctionsPrivate *funcs = qt_gl_functions(context); | - | ||||||||||||
| 374 | funcs->f.DepthRange((GLdouble) zNear, (GLdouble) zFar); | - | ||||||||||||
| 375 | } never executed: end of block | 0 | ||||||||||||
| 376 | - | |||||||||||||
| 377 | static void qopenglfSpecialGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) | - | ||||||||||||
| 378 | { | - | ||||||||||||
| 379 | (void)shadertype;; | - | ||||||||||||
| 380 | (void)precisiontype;; | - | ||||||||||||
| 381 | range[0] = range[1] = precision[0] = 0; | - | ||||||||||||
| 382 | } never executed: end of block | 0 | ||||||||||||
| 383 | - | |||||||||||||
| 384 | static GLboolean qopenglfSpecialIsProgram(GLuint program) | - | ||||||||||||
| 385 | { | - | ||||||||||||
| 386 | return never executed: program != 0;return program != 0;never executed: return program != 0; | 0 | ||||||||||||
| 387 | } | - | ||||||||||||
| 388 | - | |||||||||||||
| 389 | static GLboolean qopenglfSpecialIsShader(GLuint shader) | - | ||||||||||||
| 390 | { | - | ||||||||||||
| 391 | return never executed: shader != 0;return shader != 0;never executed: return shader != 0; | 0 | ||||||||||||
| 392 | } | - | ||||||||||||
| 393 | - | |||||||||||||
| 394 | static void qopenglfSpecialReleaseShaderCompiler() | - | ||||||||||||
| 395 | { | - | ||||||||||||
| 396 | } | - | ||||||||||||
| 397 | - | |||||||||||||
| 398 | - | |||||||||||||
| 399 | - | |||||||||||||
| 400 | - | |||||||||||||
| 401 | QOpenGLFunctionsPrivate::QOpenGLFunctionsPrivate(QOpenGLContext *c) | - | ||||||||||||
| 402 | { | - | ||||||||||||
| 403 | init(c); | - | ||||||||||||
| 404 | - | |||||||||||||
| 405 | - | |||||||||||||
| 406 | - | |||||||||||||
| 407 | if (!f.ClearDepthf
| 0 | ||||||||||||
| 408 | f.ClearDepthf = qopenglfSpecialClearDepthf; never executed: f.ClearDepthf = qopenglfSpecialClearDepthf; | 0 | ||||||||||||
| 409 | if (!f.DepthRangef
| 0 | ||||||||||||
| 410 | f.DepthRangef = qopenglfSpecialDepthRangef; never executed: f.DepthRangef = qopenglfSpecialDepthRangef; | 0 | ||||||||||||
| 411 | if (!f.GetShaderPrecisionFormat
| 0 | ||||||||||||
| 412 | f.GetShaderPrecisionFormat = qopenglfSpecialGetShaderPrecisionFormat; never executed: f.GetShaderPrecisionFormat = qopenglfSpecialGetShaderPrecisionFormat; | 0 | ||||||||||||
| 413 | if (!f.IsProgram
| 0 | ||||||||||||
| 414 | f.IsProgram = qopenglfSpecialIsProgram; never executed: f.IsProgram = qopenglfSpecialIsProgram; | 0 | ||||||||||||
| 415 | if (!f.IsShader
| 0 | ||||||||||||
| 416 | f.IsShader = qopenglfSpecialIsShader; never executed: f.IsShader = qopenglfSpecialIsShader; | 0 | ||||||||||||
| 417 | if (!f.ReleaseShaderCompiler
| 0 | ||||||||||||
| 418 | f.ReleaseShaderCompiler = qopenglfSpecialReleaseShaderCompiler; never executed: f.ReleaseShaderCompiler = qopenglfSpecialReleaseShaderCompiler; | 0 | ||||||||||||
| 419 | - | |||||||||||||
| 420 | } never executed: end of block | 0 | ||||||||||||
| 421 | - | |||||||||||||
| 422 | - | |||||||||||||
| 423 | void QOpenGLFunctionsPrivate::init(QOpenGLContext *context) { const char *names = "gl""BindTexture""\0" "gl""BlendFunc""\0" "gl""Clear""\0" "gl""ClearColor""\0" "gl""ClearDepthf""\0" "gl""ClearStencil""\0" "gl""ColorMask""\0" "gl""CopyTexImage2D""\0" "gl""CopyTexSubImage2D""\0" "gl""CullFace""\0" "gl""DeleteTextures""\0" "gl""DepthFunc""\0" "gl""DepthMask""\0" "gl""DepthRangef""\0" "gl""Disable""\0" "gl""DrawArrays""\0" "gl""DrawElements""\0" "gl""Enable""\0" "gl""Finish""\0" "gl""Flush""\0" "gl""FrontFace""\0" "gl""GenTextures""\0" "gl""GetBooleanv""\0" "gl""GetError""\0" "gl""GetFloatv""\0" "gl""GetIntegerv""\0" "gl""GetString""\0" "gl""GetTexParameterfv""\0" "gl""GetTexParameteriv""\0" "gl""Hint""\0" "gl""IsEnabled""\0" "gl""IsTexture""\0" "gl""LineWidth""\0" "gl""PixelStorei""\0" "gl""PolygonOffset""\0" "gl""ReadPixels""\0" "gl""Scissor""\0" "gl""StencilFunc""\0" "gl""StencilMask""\0" "gl""StencilOp""\0" "gl""TexImage2D""\0" "gl""TexParameterf""\0" "gl""TexParameterfv""\0" "gl""TexParameteri""\0" "gl""TexParameteriv""\0" "gl""TexSubImage2D""\0" "gl""Viewport""\0" "gl""ActiveTexture""\0" "gl""AttachShader""\0" "gl""BindAttribLocation""\0" "gl""BindBuffer""\0" "gl""BindFramebuffer""\0" "gl""BindRenderbuffer""\0" "gl""BlendColor""\0" "gl""BlendEquation""\0" "gl""BlendEquationSeparate""\0" "gl""BlendFuncSeparate""\0" "gl""BufferData""\0" "gl""BufferSubData""\0" "gl""CheckFramebufferStatus""\0" "gl""CompileShader""\0" "gl""CompressedTexImage2D""\0" "gl""CompressedTexSubImage2D""\0" "gl""CreateProgram""\0" "gl""CreateShader""\0" "gl""DeleteBuffers""\0" "gl""DeleteFramebuffers""\0" "gl""DeleteProgram""\0" "gl""DeleteRenderbuffers""\0" "gl""DeleteShader""\0" "gl""DetachShader""\0" "gl""DisableVertexAttribArray""\0" "gl""EnableVertexAttribArray""\0" "gl""FramebufferRenderbuffer""\0" "gl""FramebufferTexture2D""\0" "gl""GenBuffers""\0" "gl""GenerateMipmap""\0" "gl""GenFramebuffers""\0" "gl""GenRenderbuffers""\0" "gl""GetActiveAttrib""\0" "gl""GetActiveUniform""\0" "gl""GetAttachedShaders""\0" "gl""GetAttribLocation""\0" "gl""GetBufferParameteriv""\0" "gl""GetFramebufferAttachmentParameteriv""\0" "gl""GetProgramiv""\0" "gl""GetProgramInfoLog""\0" "gl""GetRenderbufferParameteriv""\0" "gl""GetShaderiv""\0" "gl""GetShaderInfoLog""\0" "gl""GetShaderPrecisionFormat""\0" "gl""GetShaderSource""\0" "gl""GetUniformfv""\0" "gl""GetUniformiv""\0" "gl""GetUniformLocation""\0" "gl""GetVertexAttribfv""\0" "gl""GetVertexAttribiv""\0" "gl""GetVertexAttribPointerv""\0" "gl""IsBuffer""\0" "gl""IsFramebuffer""\0" "gl""IsProgram""\0" "gl""IsRenderbuffer""\0" "gl""IsShader""\0" "gl""LinkProgram""\0" "gl""ReleaseShaderCompiler""\0" "gl""RenderbufferStorage""\0" "gl""SampleCoverage""\0" "gl""ShaderBinary""\0" "gl""ShaderSource""\0" "gl""StencilFuncSeparate""\0" "gl""StencilMaskSeparate""\0" "gl""StencilOpSeparate""\0" "gl""Uniform1f""\0" "gl""Uniform1fv""\0" "gl""Uniform1i""\0" "gl""Uniform1iv""\0" "gl""Uniform2f""\0" "gl""Uniform2fv""\0" "gl""Uniform2i""\0" "gl""Uniform2iv""\0" "gl""Uniform3f""\0" "gl""Uniform3fv""\0" "gl""Uniform3i""\0" "gl""Uniform3iv""\0" "gl""Uniform4f""\0" "gl""Uniform4fv""\0" "gl""Uniform4i""\0" "gl""Uniform4iv""\0" "gl""UniformMatrix2fv""\0" "gl""UniformMatrix3fv""\0" "gl""UniformMatrix4fv""\0" "gl""UseProgram""\0" "gl""ValidateProgram""\0" "gl""VertexAttrib1f""\0" "gl""VertexAttrib1fv""\0" "gl""VertexAttrib2f""\0" "gl""VertexAttrib2fv""\0" "gl""VertexAttrib3f""\0" "gl""VertexAttrib3fv""\0" "gl""VertexAttrib4f""\0" "gl""VertexAttrib4fv""\0" "gl""VertexAttribPointer""\0" "gl""ClearDepth""\0" "gl""DepthRange""\0"; const char *name = names; for (int i = 0; i < +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1
never executed: }end of blocknever executed: end of block | 0 | ||||||||||||
| 424 | QOpenGLExtraFunctions::QOpenGLExtraFunctions() | - | ||||||||||||
| 425 | { | - | ||||||||||||
| 426 | } | - | ||||||||||||
| 427 | QOpenGLExtraFunctions::QOpenGLExtraFunctions(QOpenGLContext *context) | - | ||||||||||||
| 428 | : QOpenGLFunctions(context) | - | ||||||||||||
| 429 | { | - | ||||||||||||
| 430 | } never executed: end of block | 0 | ||||||||||||
| 431 | - | |||||||||||||
| 432 | QOpenGLExtraFunctionsPrivate::QOpenGLExtraFunctionsPrivate(QOpenGLContext *ctx) | - | ||||||||||||
| 433 | : QOpenGLFunctionsPrivate(ctx) | - | ||||||||||||
| 434 | { | - | ||||||||||||
| 435 | init(ctx); | - | ||||||||||||
| 436 | } never executed: end of block | 0 | ||||||||||||
| 437 | - | |||||||||||||
| 438 | void QOpenGLExtraFunctionsPrivate::init(QOpenGLContext *context) { const char *names = "gl""ReadBuffer""\0" "gl""DrawRangeElements""\0" "gl""TexImage3D""\0" "gl""TexSubImage3D""\0" "gl""CopyTexSubImage3D""\0" "gl""CompressedTexImage3D""\0" "gl""CompressedTexSubImage3D""\0" "gl""GenQueries""\0" "gl""DeleteQueries""\0" "gl""IsQuery""\0" "gl""BeginQuery""\0" "gl""EndQuery""\0" "gl""GetQueryiv""\0" "gl""GetQueryObjectuiv""\0" "gl""UnmapBuffer""\0" "gl""GetBufferPointerv""\0" "gl""DrawBuffers""\0" "gl""UniformMatrix2x3fv""\0" "gl""UniformMatrix3x2fv""\0" "gl""UniformMatrix2x4fv""\0" "gl""UniformMatrix4x2fv""\0" "gl""UniformMatrix3x4fv""\0" "gl""UniformMatrix4x3fv""\0" "gl""BlitFramebuffer""\0" "gl""RenderbufferStorageMultisample""\0" "gl""FramebufferTextureLayer""\0" "gl""MapBufferRange""\0" "gl""FlushMappedBufferRange""\0" "gl""BindVertexArray""\0" "gl""DeleteVertexArrays""\0" "gl""GenVertexArrays""\0" "gl""IsVertexArray""\0" "gl""GetIntegeri_v""\0" "gl""BeginTransformFeedback""\0" "gl""EndTransformFeedback""\0" "gl""BindBufferRange""\0" "gl""BindBufferBase""\0" "gl""TransformFeedbackVaryings""\0" "gl""GetTransformFeedbackVarying""\0" "gl""VertexAttribIPointer""\0" "gl""GetVertexAttribIiv""\0" "gl""GetVertexAttribIuiv""\0" "gl""VertexAttribI4i""\0" "gl""VertexAttribI4ui""\0" "gl""VertexAttribI4iv""\0" "gl""VertexAttribI4uiv""\0" "gl""GetUniformuiv""\0" "gl""GetFragDataLocation""\0" "gl""Uniform1ui""\0" "gl""Uniform2ui""\0" "gl""Uniform3ui""\0" "gl""Uniform4ui""\0" "gl""Uniform1uiv""\0" "gl""Uniform2uiv""\0" "gl""Uniform3uiv""\0" "gl""Uniform4uiv""\0" "gl""ClearBufferiv""\0" "gl""ClearBufferuiv""\0" "gl""ClearBufferfv""\0" "gl""ClearBufferfi""\0" "gl""GetStringi""\0" "gl""CopyBufferSubData""\0" "gl""GetUniformIndices""\0" "gl""GetActiveUniformsiv""\0" "gl""GetUniformBlockIndex""\0" "gl""GetActiveUniformBlockiv""\0" "gl""GetActiveUniformBlockName""\0" "gl""UniformBlockBinding""\0" "gl""DrawArraysInstanced""\0" "gl""DrawElementsInstanced""\0" "gl""FenceSync""\0" "gl""IsSync""\0" "gl""DeleteSync""\0" "gl""ClientWaitSync""\0" "gl""WaitSync""\0" "gl""GetInteger64v""\0" "gl""GetSynciv""\0" "gl""GetInteger64i_v""\0" "gl""GetBufferParameteri64v""\0" "gl""GenSamplers""\0" "gl""DeleteSamplers""\0" "gl""IsSampler""\0" "gl""BindSampler""\0" "gl""SamplerParameteri""\0" "gl""SamplerParameteriv""\0" "gl""SamplerParameterf""\0" "gl""SamplerParameterfv""\0" "gl""GetSamplerParameteriv""\0" "gl""GetSamplerParameterfv""\0" "gl""VertexAttribDivisor""\0" "gl""BindTransformFeedback""\0" "gl""DeleteTransformFeedbacks""\0" "gl""GenTransformFeedbacks""\0" "gl""IsTransformFeedback""\0" "gl""PauseTransformFeedback""\0" "gl""ResumeTransformFeedback""\0" "gl""GetProgramBinary""\0" "gl""ProgramBinary""\0" "gl""ProgramParameteri""\0" "gl""InvalidateFramebuffer""\0" "gl""InvalidateSubFramebuffer""\0" "gl""TexStorage2D""\0" "gl""TexStorage3D""\0" "gl""GetInternalformativ""\0" "gl""DispatchCompute""\0" "gl""DispatchComputeIndirect""\0" "gl""DrawArraysIndirect""\0" "gl""DrawElementsIndirect""\0" "gl""FramebufferParameteri""\0" "gl""GetFramebufferParameteriv""\0" "gl""GetProgramInterfaceiv""\0" "gl""GetProgramResourceIndex""\0" "gl""GetProgramResourceName""\0" "gl""GetProgramResourceiv""\0" "gl""GetProgramResourceLocation""\0" "gl""UseProgramStages""\0" "gl""ActiveShaderProgram""\0" "gl""CreateShaderProgramv""\0" "gl""BindProgramPipeline""\0" "gl""DeleteProgramPipelines""\0" "gl""GenProgramPipelines""\0" "gl""IsProgramPipeline""\0" "gl""GetProgramPipelineiv""\0" "gl""ProgramUniform1i""\0" "gl""ProgramUniform2i""\0" "gl""ProgramUniform3i""\0" "gl""ProgramUniform4i""\0" "gl""ProgramUniform1ui""\0" "gl""ProgramUniform2ui""\0" "gl""ProgramUniform3ui""\0" "gl""ProgramUniform4ui""\0" "gl""ProgramUniform1f""\0" "gl""ProgramUniform2f""\0" "gl""ProgramUniform3f""\0" "gl""ProgramUniform4f""\0" "gl""ProgramUniform1iv""\0" "gl""ProgramUniform2iv""\0" "gl""ProgramUniform3iv""\0" "gl""ProgramUniform4iv""\0" "gl""ProgramUniform1uiv""\0" "gl""ProgramUniform2uiv""\0" "gl""ProgramUniform3uiv""\0" "gl""ProgramUniform4uiv""\0" "gl""ProgramUniform1fv""\0" "gl""ProgramUniform2fv""\0" "gl""ProgramUniform3fv""\0" "gl""ProgramUniform4fv""\0" "gl""ProgramUniformMatrix2fv""\0" "gl""ProgramUniformMatrix3fv""\0" "gl""ProgramUniformMatrix4fv""\0" "gl""ProgramUniformMatrix2x3fv""\0" "gl""ProgramUniformMatrix3x2fv""\0" "gl""ProgramUniformMatrix2x4fv""\0" "gl""ProgramUniformMatrix4x2fv""\0" "gl""ProgramUniformMatrix3x4fv""\0" "gl""ProgramUniformMatrix4x3fv""\0" "gl""ValidateProgramPipeline""\0" "gl""GetProgramPipelineInfoLog""\0" "gl""BindImageTexture""\0" "gl""GetBooleani_v""\0" "gl""MemoryBarrier""\0" "gl""MemoryBarrierByRegion""\0" "gl""TexStorage2DMultisample""\0" "gl""GetMultisamplefv""\0" "gl""SampleMaski""\0" "gl""GetTexLevelParameteriv""\0" "gl""GetTexLevelParameterfv""\0" "gl""BindVertexBuffer""\0" "gl""VertexAttribFormat""\0" "gl""VertexAttribIFormat""\0" "gl""VertexAttribBinding""\0" "gl""VertexBindingDivisor""\0"; const char *name = names; for (int i = 0; i < +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1
never executed: }end of blocknever executed: end of block | 0 | ||||||||||||
| 439 | - | |||||||||||||
| 440 | QOpenGLExtensionsPrivate::QOpenGLExtensionsPrivate(QOpenGLContext *ctx) | - | ||||||||||||
| 441 | : QOpenGLExtraFunctionsPrivate(ctx), | - | ||||||||||||
| 442 | flushVendorChecked(false) | - | ||||||||||||
| 443 | { | - | ||||||||||||
| 444 | QOpenGLContext *context = QOpenGLContext::currentContext(); | - | ||||||||||||
| 445 | - | |||||||||||||
| 446 | MapBuffer = resolve(context, "gl""MapBuffer", MapBuffer); | - | ||||||||||||
| 447 | GetBufferSubData = resolve(context, "gl""GetBufferSubData", GetBufferSubData); | - | ||||||||||||
| 448 | DiscardFramebuffer = resolve(context, "gl""DiscardFramebuffer", DiscardFramebuffer); | - | ||||||||||||
| 449 | } never executed: end of block | 0 | ||||||||||||
| 450 | - | |||||||||||||
| 451 | void QOpenGLExtensions::flushShared() | - | ||||||||||||
| 452 | { | - | ||||||||||||
| 453 | QOpenGLExtensionsPrivate * const d = d_func(); | - | ||||||||||||
| 454 | - | |||||||||||||
| 455 | if (!d->flushVendorChecked
| 0 | ||||||||||||
| 456 | d->flushVendorChecked = true; | - | ||||||||||||
| 457 | - | |||||||||||||
| 458 | - | |||||||||||||
| 459 | - | |||||||||||||
| 460 | - | |||||||||||||
| 461 | d->flushIsSufficientToSyncContexts = false; | - | ||||||||||||
| 462 | const char *vendor = (const char *) glGetString(0x1F00); | - | ||||||||||||
| 463 | if (vendor
| 0 | ||||||||||||
| 464 | static const char *const flushEnough[] = { "Apple", "ATI", "Intel", "NVIDIA" }; | - | ||||||||||||
| 465 | for (size_t i = 0; i < sizeof(flushEnough) / sizeof(const char *)
| 0 | ||||||||||||
| 466 | if (strstr(vendor, flushEnough[i])
| 0 | ||||||||||||
| 467 | d->flushIsSufficientToSyncContexts = true; | - | ||||||||||||
| 468 | break; never executed: break; | 0 | ||||||||||||
| 469 | } | - | ||||||||||||
| 470 | } never executed: end of block | 0 | ||||||||||||
| 471 | } never executed: end of block | 0 | ||||||||||||
| 472 | } never executed: end of block | 0 | ||||||||||||
| 473 | - | |||||||||||||
| 474 | if (d->flushIsSufficientToSyncContexts
| 0 | ||||||||||||
| 475 | glFlush(); never executed: glFlush(); | 0 | ||||||||||||
| 476 | else | - | ||||||||||||
| 477 | glFinish(); never executed: glFinish(); | 0 | ||||||||||||
| 478 | } | - | ||||||||||||
| 479 | - | |||||||||||||
| 480 | - | |||||||||||||
| Switch to Source code | Preprocessed file |