Merge remote-tracking branch 'origin/5.12' into 5.13

Conflicts:
	.qmake.conf
	src/gui/painting/qdrawhelper.cpp
	src/network/ssl/qsslsocket_openssl.cpp
	src/widgets/styles/qstylesheetstyle.cpp

Change-Id: Ibe1cd40f46a823c9e5edbe0a3cd16be1e1686b17
This commit is contained in:
Liang Qi 2019-06-20 07:50:44 +02:00
commit bd9959bde2
46 changed files with 1860 additions and 1565 deletions

83
dist/changes-5.12.4 vendored Normal file
View File

@ -0,0 +1,83 @@
Qt 5.12.4 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 5.12.0 through 5.12.3.
For more details, refer to the online documentation included in this
distribution. The documentation is also available online:
https://doc.qt.io/qt-5/index.html
The Qt version 5.12 series is binary compatible with the 5.11.x series.
Applications compiled for 5.11 will continue to run with 5.12.
Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:
https://bugreports.qt.io/
Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
****************************************************************************
* Platform Specific Changes *
****************************************************************************
- X11 / XCB:
* [QTBUG-45375] QTabletEvent coordinates now come from AbsX/AbsY
valuators in the X11 event, in more precise 32.32 fixed-point format,
scaled to fit the virtual desktop. It's possible to revert to using
the legacy 16.16-format event_x/event_y coordinates as in previous
releases by setting the QT_XCB_TABLET_LEGACY_COORDINATES environment
variable.
****************************************************************************
* QtCore *
****************************************************************************
- Global:
* [QTBUG-72073] Added the QT_NO_FLOAT16_OPERATORS macro in order to work
around a Microsoft <= VS2017 compiler bug that is exposed when using
std::bitset along with any Qt header that includes <qfloat16.h>.
- QDeadlineTimer:
* [QTBUG-69750] Fixed integer overflows leading to immediate timeouts.
- QFile:
* Made QFile::copy() issue a filesystem-synchronization system call,
which would make it less likely to result in incomplete or corrupt
files if the system reboots or uncleanly shuts down soon after the
function returns. New code is advised to use QSaveFile instead, which
also allows to display a progress report while copying.
- QFileInfo:
* [QTBUG-63970][QTBUG-30401][QTBUG-20791] Fixed resolving of symbolic
links to UNC shares on NTFS file systems.
- QMetaObject:
* Non-copyable lambdas can now be used with invokeMethod(). For
consistency reasons, the functor object is now always moved.
****************************************************************************
* QtGui *
****************************************************************************
- [QTBUG-73231] QWindow::mapToGlobal()/mapFromGlobal() now handle windows
spanning screens correctly.
- [QTBUG-75522] QBezier: Fix possible endless loop when stroking curves
****************************************************************************
* QtWidgets *
****************************************************************************
- QMenu:
* Shortcuts are again shown by default in context menus, except on
macOS. They can be forced off by setting
AA_DontShowShortcutsInContextMenus to true.
****************************************************************************
* Third-Party Code *
****************************************************************************
- libpng was updated to version 1.6.37
- Updated QLocale to CLDR v35.1
- Updated bundled SQLite to version 3.28.0

View File

@ -30,7 +30,7 @@
\title Class Wizard Example \title Class Wizard Example
\ingroup examples-dialogs \ingroup examples-dialogs
\brief The License Wizard example shows how to implement linear \brief The Class Wizard example shows how to implement linear
wizards using QWizard. wizards using QWizard.
\image classwizard.png Screenshot of the Class Wizard example \image classwizard.png Screenshot of the Class Wizard example

View File

@ -28,7 +28,10 @@ CONFIG(release, debug|release) {
} }
load(link_ltcg) load(link_ltcg)
QMAKE_CFLAGS *= $$QMAKE_CFLAGS_LTCG QMAKE_CFLAGS -= $$QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS *= $$QMAKE_CXXFLAGS_LTCG QMAKE_CFLAGS += $$QMAKE_CFLAGS_LTCG
QMAKE_LFLAGS *= $$QMAKE_LFLAGS_LTCG QMAKE_CXXFLAGS -= $$QMAKE_CXXFLAGS_LTCG
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_LTCG
QMAKE_LFLAGS -= $$QMAKE_LFLAGS_LTCG
QMAKE_LFLAGS += $$QMAKE_LFLAGS_LTCG
} }

View File

@ -272,7 +272,7 @@ headersclean:!internal_module {
hcleanFLAGS += -std=c++98 hcleanFLAGS += -std=c++98
} }
hcleanCOMMAND = $$QMAKE_CXX -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -xc++ ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT} hcleanCOMMAND = $(CXX) -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -xc++ ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
} else: msvc:!intel_icl { } else: msvc:!intel_icl {
# 4180: qualifier applied to function type has no meaning; ignored # 4180: qualifier applied to function type has no meaning; ignored
# 4458: declaration of 'identifier' hides class member # 4458: declaration of 'identifier' hides class member
@ -284,7 +284,7 @@ headersclean:!internal_module {
# 4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc # 4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc
greaterThan(QMAKE_MSC_VER, 18): hcleanFLAGS += -wd4577 greaterThan(QMAKE_MSC_VER, 18): hcleanFLAGS += -wd4577
hcleanCOMMAND = $$QMAKE_CXX -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -FI${QMAKE_FILE_IN} -Fo${QMAKE_FILE_OUT} \ hcleanCOMMAND = $(CXX) -c $(CXXFLAGS) $$hcleanFLAGS $(INCPATH) $$hcleanDEFS -FI${QMAKE_FILE_IN} -Fo${QMAKE_FILE_OUT} \
$$[QT_INSTALL_DATA/src]/mkspecs/features/data/dummy.cpp $$[QT_INSTALL_DATA/src]/mkspecs/features/data/dummy.cpp
} }

View File

@ -1,77 +1,77 @@
LIBRARY libEGL LIBRARY libEGL
EXPORTS EXPORTS
eglBindAPI @14 eglBindAPI@4 @14
eglBindTexImage @20 eglBindTexImage@12 @20
eglChooseConfig @7 eglChooseConfig@20 @7
eglCopyBuffers @33 eglCopyBuffers@12 @33
eglCreateContext @23 eglCreateContext@16 @23
eglCreatePbufferFromClientBuffer @18 eglCreatePbufferFromClientBuffer@20 @18
eglCreatePbufferSurface @10 eglCreatePbufferSurface@12 @10
eglCreatePixmapSurface @11 eglCreatePixmapSurface@16 @11
eglCreateWindowSurface @9 eglCreateWindowSurface@16 @9
eglDestroyContext @24 eglDestroyContext@8 @24
eglDestroySurface @12 eglDestroySurface@8 @12
eglGetConfigAttrib @8 eglGetConfigAttrib@16 @8
eglGetConfigs @6 eglGetConfigs@16 @6
eglGetCurrentContext @26 eglGetCurrentContext@0 @26
eglGetCurrentDisplay @28 eglGetCurrentDisplay@0 @28
eglGetCurrentSurface @27 eglGetCurrentSurface@4 @27
eglGetDisplay @2 eglGetDisplay@4 @2
eglGetError @1 eglGetError@0 @1
eglGetProcAddress @34 eglGetProcAddress@4 @34
eglInitialize @3 eglInitialize@12 @3
eglMakeCurrent @25 eglMakeCurrent@16 @25
eglQueryAPI @15 eglQueryAPI@0 @15
eglQueryContext @29 eglQueryContext@16 @29
eglQueryString @5 eglQueryString@8 @5
eglQuerySurface @13 eglQuerySurface@16 @13
eglReleaseTexImage @21 eglReleaseTexImage@12 @21
eglReleaseThread @17 eglReleaseThread@0 @17
eglSurfaceAttrib @19 eglSurfaceAttrib@16 @19
eglSwapBuffers @32 eglSwapBuffers@8 @32
eglSwapInterval @22 eglSwapInterval@8 @22
eglTerminate @4 eglTerminate@4 @4
eglWaitClient @16 eglWaitClient@0 @16
eglWaitGL @30 eglWaitGL@0 @30
eglWaitNative @31 eglWaitNative@4 @31
; Extensions ; Extensions
eglGetPlatformDisplayEXT @35 eglGetPlatformDisplayEXT@12 @35
eglQuerySurfacePointerANGLE @36 eglQuerySurfacePointerANGLE@16 @36
eglPostSubBufferNV @37 eglPostSubBufferNV@24 @37
eglQueryDisplayAttribEXT @48 eglQueryDisplayAttribEXT@12 @48
eglQueryDeviceAttribEXT @49 eglQueryDeviceAttribEXT@12 @49
eglQueryDeviceStringEXT @50 eglQueryDeviceStringEXT@8 @50
eglCreateImageKHR @51 eglCreateImageKHR@20 @51
eglDestroyImageKHR @52 eglDestroyImageKHR@8 @52
eglCreateDeviceANGLE @53 eglCreateDeviceANGLE@12 @53
eglReleaseDeviceANGLE @54 eglReleaseDeviceANGLE@4 @54
eglCreateStreamKHR @55 eglCreateStreamKHR@8 @55
eglDestroyStreamKHR @56 eglDestroyStreamKHR@8 @56
eglStreamAttribKHR @57 eglStreamAttribKHR@16 @57
eglQueryStreamKHR @58 eglQueryStreamKHR@16 @58
eglQueryStreamu64KHR @59 eglQueryStreamu64KHR@16 @59
eglStreamConsumerGLTextureExternalKHR @60 eglStreamConsumerGLTextureExternalKHR@8 @60
eglStreamConsumerAcquireKHR @61 eglStreamConsumerAcquireKHR@8 @61
eglStreamConsumerReleaseKHR @62 eglStreamConsumerReleaseKHR@8 @62
eglStreamConsumerGLTextureExternalAttribsNV @63 eglStreamConsumerGLTextureExternalAttribsNV@12 @63
eglCreateStreamProducerD3DTextureNV12ANGLE @64 eglCreateStreamProducerD3DTextureNV12ANGLE@12 @64
eglStreamPostD3DTextureNV12ANGLE @65 eglStreamPostD3DTextureNV12ANGLE@16 @65
eglGetSyncValuesCHROMIUM @66 eglGetSyncValuesCHROMIUM@20 @66
eglSwapBuffersWithDamageEXT @67 eglSwapBuffersWithDamageEXT@16 @67
eglProgramCacheGetAttribANGLE @68 eglProgramCacheGetAttribANGLE@8 @68
eglProgramCachePopulateANGLE @69 eglProgramCachePopulateANGLE@20 @69
eglProgramCacheQueryANGLE @70 eglProgramCacheQueryANGLE@24 @70
eglProgramCacheResizeANGLE @71 eglProgramCacheResizeANGLE@12 @71
; 1.5 entry points ; 1.5 entry points
eglCreateSync @38 eglCreateSync@12 @38
eglDestroySync @39 eglDestroySync@8 @39
eglClientWaitSync @40 eglClientWaitSync@20 @40
eglGetSyncAttrib @41 eglGetSyncAttrib@16 @41
eglCreateImage @42 eglCreateImage@20 @42
eglDestroyImage @43 eglDestroyImage@8 @43
eglGetPlatformDisplay @44 eglGetPlatformDisplay@12 @44
eglCreatePlatformWindowSurface @45 eglCreatePlatformWindowSurface@16 @45
eglCreatePlatformPixmapSurface @46 eglCreatePlatformPixmapSurface@16 @46
eglWaitSync @47 eglWaitSync@12 @47

View File

@ -1,77 +1,77 @@
LIBRARY libEGL LIBRARY libEGL
EXPORTS EXPORTS
eglBindAPI @14 eglBindAPI@4 @14
eglBindTexImage @20 eglBindTexImage@12 @20
eglChooseConfig @7 eglChooseConfig@20 @7
eglCopyBuffers @33 eglCopyBuffers@12 @33
eglCreateContext @23 eglCreateContext@16 @23
eglCreatePbufferFromClientBuffer @18 eglCreatePbufferFromClientBuffer@20 @18
eglCreatePbufferSurface @10 eglCreatePbufferSurface@12 @10
eglCreatePixmapSurface @11 eglCreatePixmapSurface@16 @11
eglCreateWindowSurface @9 eglCreateWindowSurface@16 @9
eglDestroyContext @24 eglDestroyContext@8 @24
eglDestroySurface @12 eglDestroySurface@8 @12
eglGetConfigAttrib @8 eglGetConfigAttrib@16 @8
eglGetConfigs @6 eglGetConfigs@16 @6
eglGetCurrentContext @26 eglGetCurrentContext@0 @26
eglGetCurrentDisplay @28 eglGetCurrentDisplay@0 @28
eglGetCurrentSurface @27 eglGetCurrentSurface@4 @27
eglGetDisplay @2 eglGetDisplay@4 @2
eglGetError @1 eglGetError@0 @1
eglGetProcAddress @34 eglGetProcAddress@4 @34
eglInitialize @3 eglInitialize@12 @3
eglMakeCurrent @25 eglMakeCurrent@16 @25
eglQueryAPI @15 eglQueryAPI@0 @15
eglQueryContext @29 eglQueryContext@16 @29
eglQueryString @5 eglQueryString@8 @5
eglQuerySurface @13 eglQuerySurface@16 @13
eglReleaseTexImage @21 eglReleaseTexImage@12 @21
eglReleaseThread @17 eglReleaseThread@0 @17
eglSurfaceAttrib @19 eglSurfaceAttrib@16 @19
eglSwapBuffers @32 eglSwapBuffers@8 @32
eglSwapInterval @22 eglSwapInterval@8 @22
eglTerminate @4 eglTerminate@4 @4
eglWaitClient @16 eglWaitClient@0 @16
eglWaitGL @30 eglWaitGL@0 @30
eglWaitNative @31 eglWaitNative@4 @31
; Extensions ; Extensions
eglGetPlatformDisplayEXT @35 eglGetPlatformDisplayEXT@12 @35
eglQuerySurfacePointerANGLE @36 eglQuerySurfacePointerANGLE@16 @36
eglPostSubBufferNV @37 eglPostSubBufferNV@24 @37
eglQueryDisplayAttribEXT @48 eglQueryDisplayAttribEXT@12 @48
eglQueryDeviceAttribEXT @49 eglQueryDeviceAttribEXT@12 @49
eglQueryDeviceStringEXT @50 eglQueryDeviceStringEXT@8 @50
eglCreateImageKHR @51 eglCreateImageKHR@20 @51
eglDestroyImageKHR @52 eglDestroyImageKHR@8 @52
eglCreateDeviceANGLE @53 eglCreateDeviceANGLE@12 @53
eglReleaseDeviceANGLE @54 eglReleaseDeviceANGLE@4 @54
eglCreateStreamKHR @55 eglCreateStreamKHR@8 @55
eglDestroyStreamKHR @56 eglDestroyStreamKHR@8 @56
eglStreamAttribKHR @57 eglStreamAttribKHR@16 @57
eglQueryStreamKHR @58 eglQueryStreamKHR@16 @58
eglQueryStreamu64KHR @59 eglQueryStreamu64KHR@16 @59
eglStreamConsumerGLTextureExternalKHR @60 eglStreamConsumerGLTextureExternalKHR@8 @60
eglStreamConsumerAcquireKHR @61 eglStreamConsumerAcquireKHR@8 @61
eglStreamConsumerReleaseKHR @62 eglStreamConsumerReleaseKHR@8 @62
eglStreamConsumerGLTextureExternalAttribsNV @63 eglStreamConsumerGLTextureExternalAttribsNV@12 @63
eglCreateStreamProducerD3DTextureNV12ANGLE @64 eglCreateStreamProducerD3DTextureNV12ANGLE@12 @64
eglStreamPostD3DTextureNV12ANGLE @65 eglStreamPostD3DTextureNV12ANGLE@16 @65
eglGetSyncValuesCHROMIUM @66 eglGetSyncValuesCHROMIUM@20 @66
eglSwapBuffersWithDamageEXT @67 eglSwapBuffersWithDamageEXT@16 @67
eglProgramCacheGetAttribANGLE @68 eglProgramCacheGetAttribANGLE@8 @68
eglProgramCachePopulateANGLE @69 eglProgramCachePopulateANGLE@20 @69
eglProgramCacheQueryANGLE @70 eglProgramCacheQueryANGLE@24 @70
eglProgramCacheResizeANGLE @71 eglProgramCacheResizeANGLE@12 @71
; 1.5 entry points ; 1.5 entry points
eglCreateSync @38 eglCreateSync@12 @38
eglDestroySync @39 eglDestroySync@8 @39
eglClientWaitSync @40 eglClientWaitSync@20 @40
eglGetSyncAttrib @41 eglGetSyncAttrib@16 @41
eglCreateImage @42 eglCreateImage@20 @42
eglDestroyImage @43 eglDestroyImage@8 @43
eglGetPlatformDisplay @44 eglGetPlatformDisplay@12 @44
eglCreatePlatformWindowSurface @45 eglCreatePlatformWindowSurface@16 @45
eglCreatePlatformPixmapSurface @46 eglCreatePlatformPixmapSurface@16 @46
eglWaitSync @47 eglWaitSync@12 @47

View File

@ -1,412 +1,411 @@
LIBRARY libGLESv2 LIBRARY libGLESv2
EXPORTS EXPORTS
glActiveTexture @1 glActiveTexture@4 @1
glAttachShader @2 glAttachShader@8 @2
glBindAttribLocation @3 glBindAttribLocation@12 @3
glBindBuffer @4 glBindBuffer@8 @4
glBindFramebuffer @5 glBindFramebuffer@8 @5
glBindRenderbuffer @6 glBindRenderbuffer@8 @6
glBindTexture @7 glBindTexture@8 @7
glBlendColor @8 glBlendColor@16 @8
glBlendEquation @9 glBlendEquation@4 @9
glBlendEquationSeparate @10 glBlendEquationSeparate@8 @10
glBlendFunc @11 glBlendFunc@8 @11
glBlendFuncSeparate @12 glBlendFuncSeparate@16 @12
glBufferData @13 glBufferData@16 @13
glBufferSubData @14 glBufferSubData@16 @14
glCheckFramebufferStatus @15 glCheckFramebufferStatus@4 @15
glClear @16 glClear@4 @16
glClearColor @17 glClearColor@16 @17
glClearDepthf @18 glClearDepthf@4 @18
glClearStencil @19 glClearStencil@4 @19
glColorMask @20 glColorMask@16 @20
glCompileShader @21 glCompileShader@4 @21
glCompressedTexImage2D @22 glCompressedTexImage2D@32 @22
glCompressedTexSubImage2D @23 glCompressedTexSubImage2D@36 @23
glCopyTexImage2D @24 glCopyTexImage2D@32 @24
glCopyTexSubImage2D @25 glCopyTexSubImage2D@32 @25
glCreateProgram @26 glCreateProgram@0 @26
glCreateShader @27 glCreateShader@4 @27
glCullFace @28 glCullFace@4 @28
glDeleteBuffers @29 glDeleteBuffers@8 @29
glDeleteFramebuffers @30 glDeleteFramebuffers@8 @30
glDeleteProgram @32 glDeleteProgram@4 @32
glDeleteRenderbuffers @33 glDeleteRenderbuffers@8 @33
glDeleteShader @34 glDeleteShader@4 @34
glDeleteTextures @31 glDeleteTextures@8 @31
glDepthFunc @36 glDepthFunc@4 @36
glDepthMask @37 glDepthMask@4 @37
glDepthRangef @38 glDepthRangef@8 @38
glDetachShader @35 glDetachShader@8 @35
glDisable @39 glDisable@4 @39
glDisableVertexAttribArray @40 glDisableVertexAttribArray@4 @40
glDrawArrays @41 glDrawArrays@12 @41
glDrawElements @42 glDrawElements@16 @42
glEnable @43 glEnable@4 @43
glEnableVertexAttribArray @44 glEnableVertexAttribArray@4 @44
glFinish @45 glFinish@0 @45
glFlush @46 glFlush@0 @46
glFramebufferRenderbuffer @47 glFramebufferRenderbuffer@16 @47
glFramebufferTexture2D @48 glFramebufferTexture2D@20 @48
glFrontFace @49 glFrontFace@4 @49
glGenBuffers @50 glGenBuffers@8 @50
glGenFramebuffers @52 glGenFramebuffers@8 @52
glGenRenderbuffers @53 glGenRenderbuffers@8 @53
glGenTextures @54 glGenTextures@8 @54
glGenerateMipmap @51 glGenerateMipmap@4 @51
glGetActiveAttrib @55 glGetActiveAttrib@28 @55
glGetActiveUniform @56 glGetActiveUniform@28 @56
glGetAttachedShaders @57 glGetAttachedShaders@16 @57
glGetAttribLocation @58 glGetAttribLocation@8 @58
glGetBooleanv @59 glGetBooleanv@8 @59
glGetBufferParameteriv @60 glGetBufferParameteriv@12 @60
glGetError @61 glGetError@0 @61
glGetFloatv @62 glGetFloatv@8 @62
glGetFramebufferAttachmentParameteriv @63 glGetFramebufferAttachmentParameteriv@16 @63
glGetIntegerv @64 glGetIntegerv@8 @64
glGetProgramInfoLog @66 glGetProgramInfoLog@16 @66
glGetProgramiv @65 glGetProgramiv@12 @65
glGetRenderbufferParameteriv @67 glGetRenderbufferParameteriv@12 @67
glGetShaderInfoLog @69 glGetShaderInfoLog@16 @69
glGetShaderPrecisionFormat @70 glGetShaderPrecisionFormat@16 @70
glGetShaderSource @71 glGetShaderSource@16 @71
glGetShaderiv @68 glGetShaderiv@12 @68
glGetString @72 glGetString@4 @72
glGetTexParameterfv @73 glGetTexParameterfv@12 @73
glGetTexParameteriv @74 glGetTexParameteriv@12 @74
glGetUniformLocation @77 glGetUniformLocation@8 @77
glGetUniformfv @75 glGetUniformfv@12 @75
glGetUniformiv @76 glGetUniformiv@12 @76
glGetVertexAttribPointerv @80 glGetVertexAttribPointerv@12 @80
glGetVertexAttribfv @78 glGetVertexAttribfv@12 @78
glGetVertexAttribiv @79 glGetVertexAttribiv@12 @79
glHint @81 glHint@8 @81
glIsBuffer @82 glIsBuffer@4 @82
glIsEnabled @83 glIsEnabled@4 @83
glIsFramebuffer @84 glIsFramebuffer@4 @84
glIsProgram @85 glIsProgram@4 @85
glIsRenderbuffer @86 glIsRenderbuffer@4 @86
glIsShader @87 glIsShader@4 @87
glIsTexture @88 glIsTexture@4 @88
glLineWidth @89 glLineWidth@4 @89
glLinkProgram @90 glLinkProgram@4 @90
glPixelStorei @91 glPixelStorei@8 @91
glPolygonOffset @92 glPolygonOffset@8 @92
glReadPixels @93 glReadPixels@28 @93
glReleaseShaderCompiler @94 glReleaseShaderCompiler@0 @94
glRenderbufferStorage @95 glRenderbufferStorage@16 @95
glSampleCoverage @96 glSampleCoverage@8 @96
glScissor @97 glScissor@16 @97
glShaderBinary @98 glShaderBinary@20 @98
glShaderSource @99 glShaderSource@16 @99
glStencilFunc @100 glStencilFunc@12 @100
glStencilFuncSeparate @101 glStencilFuncSeparate@16 @101
glStencilMask @102 glStencilMask@4 @102
glStencilMaskSeparate @103 glStencilMaskSeparate@8 @103
glStencilOp @104 glStencilOp@12 @104
glStencilOpSeparate @105 glStencilOpSeparate@16 @105
glTexImage2D @106 glTexImage2D@36 @106
glTexParameterf @107 glTexParameterf@12 @107
glTexParameterfv @108 glTexParameterfv@12 @108
glTexParameteri @109 glTexParameteri@12 @109
glTexParameteriv @110 glTexParameteriv@12 @110
glTexSubImage2D @111 glTexSubImage2D@36 @111
glUniform1f @112 glUniform1f@8 @112
glUniform1fv @113 glUniform1fv@12 @113
glUniform1i @114 glUniform1i@8 @114
glUniform1iv @115 glUniform1iv@12 @115
glUniform2f @116 glUniform2f@12 @116
glUniform2fv @117 glUniform2fv@12 @117
glUniform2i @118 glUniform2i@12 @118
glUniform2iv @119 glUniform2iv@12 @119
glUniform3f @120 glUniform3f@16 @120
glUniform3fv @121 glUniform3fv@12 @121
glUniform3i @122 glUniform3i@16 @122
glUniform3iv @123 glUniform3iv@12 @123
glUniform4f @124 glUniform4f@20 @124
glUniform4fv @125 glUniform4fv@12 @125
glUniform4i @126 glUniform4i@20 @126
glUniform4iv @127 glUniform4iv@12 @127
glUniformMatrix2fv @128 glUniformMatrix2fv@16 @128
glUniformMatrix3fv @129 glUniformMatrix3fv@16 @129
glUniformMatrix4fv @130 glUniformMatrix4fv@16 @130
glUseProgram @131 glUseProgram@4 @131
glValidateProgram @132 glValidateProgram@4 @132
glVertexAttrib1f @133 glVertexAttrib1f@8 @133
glVertexAttrib1fv @134 glVertexAttrib1fv@8 @134
glVertexAttrib2f @135 glVertexAttrib2f@12 @135
glVertexAttrib2fv @136 glVertexAttrib2fv@8 @136
glVertexAttrib3f @137 glVertexAttrib3f@16 @137
glVertexAttrib3fv @138 glVertexAttrib3fv@8 @138
glVertexAttrib4f @139 glVertexAttrib4f@20 @139
glVertexAttrib4fv @140 glVertexAttrib4fv@8 @140
glVertexAttribPointer @141 glVertexAttribPointer@24 @141
glViewport @142 glViewport@16 @142
; Extensions ; Extensions
glBlitFramebufferANGLE @149 glBlitFramebufferANGLE@40 @149
glRenderbufferStorageMultisampleANGLE @150 glRenderbufferStorageMultisampleANGLE@20 @150
glDeleteFencesNV @151 glDeleteFencesNV@8 @151
glFinishFenceNV @152 glFinishFenceNV@4 @152
glGenFencesNV @153 glGenFencesNV@8 @153
glGetFenceivNV @154 glGetFenceivNV@12 @154
glIsFenceNV @155 glIsFenceNV@4 @155
glSetFenceNV @156 glSetFenceNV@8 @156
glTestFenceNV @157 glTestFenceNV@4 @157
glGetTranslatedShaderSourceANGLE @159 glGetTranslatedShaderSourceANGLE@16 @159
glTexStorage2DEXT @160 glTexStorage2DEXT@20 @160
glGetGraphicsResetStatusEXT @161 glGetGraphicsResetStatusEXT@0 @161
glReadnPixelsEXT @162 glReadnPixelsEXT@32 @162
glGetnUniformfvEXT @163 glGetnUniformfvEXT@16 @163
glGetnUniformivEXT @164 glGetnUniformivEXT@16 @164
glGenQueriesEXT @165 glGenQueriesEXT@8 @165
glDeleteQueriesEXT @166 glDeleteQueriesEXT@8 @166
glIsQueryEXT @167 glIsQueryEXT@4 @167
glBeginQueryEXT @168 glBeginQueryEXT@8 @168
glEndQueryEXT @169 glEndQueryEXT@4 @169
glGetQueryivEXT @170 glGetQueryivEXT@12 @170
glGetQueryObjectuivEXT @171 glGetQueryObjectuivEXT@12 @171
glVertexAttribDivisorANGLE @172 glVertexAttribDivisorANGLE@8 @172
glDrawArraysInstancedANGLE @173 glDrawArraysInstancedANGLE@16 @173
glDrawElementsInstancedANGLE @174 glDrawElementsInstancedANGLE@20 @174
glProgramBinaryOES @175 glProgramBinaryOES@16 @175
glGetProgramBinaryOES @176 glGetProgramBinaryOES@20 @176
glDrawBuffersEXT @179 glDrawBuffersEXT@8 @179
glMapBufferOES @285 glMapBufferOES@8 @285
glUnmapBufferOES @286 glUnmapBufferOES@4 @286
glGetBufferPointervOES @287 glGetBufferPointervOES@12 @287
glMapBufferRangeEXT @288 glMapBufferRangeEXT@16 @288
glFlushMappedBufferRangeEXT @289 glFlushMappedBufferRangeEXT@12 @289
glDiscardFramebufferEXT @293 glDiscardFramebufferEXT@12 @293
glInsertEventMarkerEXT @294 glInsertEventMarkerEXT@8 @294
glPushGroupMarkerEXT @295 glPushGroupMarkerEXT@8 @295
glPopGroupMarkerEXT @296 glPopGroupMarkerEXT@0 @296
glEGLImageTargetTexture2DOES @297 glEGLImageTargetTexture2DOES@8 @297
glEGLImageTargetRenderbufferStorageOES @298 glEGLImageTargetRenderbufferStorageOES@8 @298
glBindVertexArrayOES @299 glBindVertexArrayOES@4 @299
glDeleteVertexArraysOES @300 glDeleteVertexArraysOES@8 @300
glGenVertexArraysOES @301 glGenVertexArraysOES@8 @301
glIsVertexArrayOES @302 glIsVertexArrayOES@4 @302
glDebugMessageControlKHR @303 glDebugMessageControlKHR@24 @303
glDebugMessageInsertKHR @304 glDebugMessageInsertKHR@24 @304
glDebugMessageCallbackKHR @305 glDebugMessageCallbackKHR@8 @305
glGetDebugMessageLogKHR @306 glGetDebugMessageLogKHR@32 @306
glPushDebugGroupKHR @307 glPushDebugGroupKHR@16 @307
glPopDebugGroupKHR @308 glPopDebugGroupKHR@0 @308
glObjectLabelKHR @309 glObjectLabelKHR@16 @309
glGetObjectLabelKHR @310 glGetObjectLabelKHR@20 @310
glObjectPtrLabelKHR @311 glObjectPtrLabelKHR@12 @311
glGetObjectPtrLabelKHR @312 glGetObjectPtrLabelKHR@16 @312
glGetPointervKHR @313 glGetPointervKHR@8 @313
glQueryCounterEXT @314 glQueryCounterEXT@8 @314
glGetQueryObjectivEXT @315 glGetQueryObjectivEXT@12 @315
glGetQueryObjecti64vEXT @316 glGetQueryObjecti64vEXT@12 @316
glGetQueryObjectui64vEXT @317 glGetQueryObjectui64vEXT@12 @317
glBindUniformLocationCHROMIUM @318 glBindUniformLocationCHROMIUM@12 @318
glCoverageModulationCHROMIUM @319 glCoverageModulationCHROMIUM@4 @319
glMatrixLoadfCHROMIUM@8 @320
glMatrixLoadIdentityCHROMIUM@4 @321
glGenPathsCHROMIUM@4 @322
glDeletePathsCHROMIUM@8 @323
glIsPathCHROMIUM@4 @324
glPathCommandsCHROMIUM@24 @325
glPathParameterfCHROMIUM@12 @326
glPathParameteriCHROMIUM@12 @327
glGetPathParameterfvCHROMIUM@12 @328
glGetPathParameterivCHROMIUM@12 @329
glPathStencilFuncCHROMIUM@12 @330
glStencilFillPathCHROMIUM@12 @331
glStencilStrokePathCHROMIUM@12 @332
glCoverFillPathCHROMIUM@8 @333
glCoverStrokePathCHROMIUM@8 @334
glStencilThenCoverFillPathCHROMIUM@16 @335
glStencilThenCoverStrokePathCHROMIUM@16 @336
glCoverFillPathInstancedCHROMIUM@28 @337
glCoverStrokePathInstancedCHROMIUM@28 @338
glStencilStrokePathInstancedCHROMIUM@32 @339
glStencilFillPathInstancedCHROMIUM@32 @340
glStencilThenCoverFillPathInstancedCHROMIUM@36 @341
glStencilThenCoverStrokePathInstancedCHROMIUM@36 @342
glBindFragmentInputLocationCHROMIUM@12 @343
glProgramPathFragmentInputGenCHROMIUM@20 @344
glMatrixLoadfCHROMIUM @320 glFramebufferTextureMultiviewLayeredANGLE@24 @413
glMatrixLoadIdentityCHROMIUM @321 glFramebufferTextureMultiviewSideBySideANGLE@24 @414
glGenPathsCHROMIUM @322 glRequestExtensionANGLE@4 @415
glDeletePathsCHROMIUM @323
glIsPathCHROMIUM @324
glPathCommandsCHROMIUM @325
glPathParameterfCHROMIUM @326
glPathParameteriCHROMIUM @327
glGetPathParameterfvCHROMIUM @328
glGetPathParameterivCHROMIUM @329
glPathStencilFuncCHROMIUM @330
glStencilFillPathCHROMIUM @331
glStencilStrokePathCHROMIUM @332
glCoverFillPathCHROMIUM @333
glCoverStrokePathCHROMIUM @334
glStencilThenCoverFillPathCHROMIUM @335
glStencilThenCoverStrokePathCHROMIUM @336
glCoverFillPathInstancedCHROMIUM @337
glCoverStrokePathInstancedCHROMIUM @338
glStencilStrokePathInstancedCHROMIUM @339
glStencilFillPathInstancedCHROMIUM @340
glStencilThenCoverFillPathInstancedCHROMIUM @341
glStencilThenCoverStrokePathInstancedCHROMIUM @342
glBindFragmentInputLocationCHROMIUM @343
glProgramPathFragmentInputGenCHROMIUM @344
glFramebufferTextureMultiviewLayeredANGLE @413
glFramebufferTextureMultiviewSideBySideANGLE @414
glRequestExtensionANGLE @415
; GLES 3.0 Functions ; GLES 3.0 Functions
glReadBuffer @180 glReadBuffer@4 @180
glDrawRangeElements @181 glDrawRangeElements@24 @181
glTexImage3D @182 glTexImage3D@40 @182
glTexSubImage3D @183 glTexSubImage3D@44 @183
glCopyTexSubImage3D @184 glCopyTexSubImage3D@36 @184
glCompressedTexImage3D @185 glCompressedTexImage3D@36 @185
glCompressedTexSubImage3D @186 glCompressedTexSubImage3D@44 @186
glGenQueries @187 glGenQueries@8 @187
glDeleteQueries @188 glDeleteQueries@8 @188
glIsQuery @189 glIsQuery@4 @189
glBeginQuery @190 glBeginQuery@8 @190
glEndQuery @191 glEndQuery@4 @191
glGetQueryiv @192 glGetQueryiv@12 @192
glGetQueryObjectuiv @193 glGetQueryObjectuiv@12 @193
glUnmapBuffer @194 glUnmapBuffer@4 @194
glGetBufferPointerv @195 glGetBufferPointerv@12 @195
glDrawBuffers @196 glDrawBuffers@8 @196
glUniformMatrix2x3fv @197 glUniformMatrix2x3fv@16 @197
glUniformMatrix3x2fv @198 glUniformMatrix3x2fv@16 @198
glUniformMatrix2x4fv @199 glUniformMatrix2x4fv@16 @199
glUniformMatrix4x2fv @200 glUniformMatrix4x2fv@16 @200
glUniformMatrix3x4fv @201 glUniformMatrix3x4fv@16 @201
glUniformMatrix4x3fv @202 glUniformMatrix4x3fv@16 @202
glBlitFramebuffer @203 glBlitFramebuffer@40 @203
glRenderbufferStorageMultisample @204 glRenderbufferStorageMultisample@20 @204
glFramebufferTextureLayer @205 glFramebufferTextureLayer@20 @205
glMapBufferRange @206 glMapBufferRange@16 @206
glFlushMappedBufferRange @207 glFlushMappedBufferRange@12 @207
glBindVertexArray @208 glBindVertexArray@4 @208
glDeleteVertexArrays @209 glDeleteVertexArrays@8 @209
glGenVertexArrays @210 glGenVertexArrays@8 @210
glIsVertexArray @211 glIsVertexArray@4 @211
glGetIntegeri_v @212 glGetIntegeri_v@12 @212
glBeginTransformFeedback @213 glBeginTransformFeedback@4 @213
glEndTransformFeedback @214 glEndTransformFeedback@0 @214
glBindBufferRange @215 glBindBufferRange@20 @215
glBindBufferBase @216 glBindBufferBase@12 @216
glTransformFeedbackVaryings @217 glTransformFeedbackVaryings@16 @217
glGetTransformFeedbackVarying @218 glGetTransformFeedbackVarying@28 @218
glVertexAttribIPointer @219 glVertexAttribIPointer@20 @219
glGetVertexAttribIiv @220 glGetVertexAttribIiv@12 @220
glGetVertexAttribIuiv @221 glGetVertexAttribIuiv@12 @221
glVertexAttribI4i @222 glVertexAttribI4i@20 @222
glVertexAttribI4ui @223 glVertexAttribI4ui@20 @223
glVertexAttribI4iv @224 glVertexAttribI4iv@8 @224
glVertexAttribI4uiv @225 glVertexAttribI4uiv@8 @225
glGetUniformuiv @226 glGetUniformuiv@12 @226
glGetFragDataLocation @227 glGetFragDataLocation@8 @227
glUniform1ui @228 glUniform1ui@8 @228
glUniform2ui @229 glUniform2ui@12 @229
glUniform3ui @230 glUniform3ui@16 @230
glUniform4ui @231 glUniform4ui@20 @231
glUniform1uiv @232 glUniform1uiv@12 @232
glUniform2uiv @233 glUniform2uiv@12 @233
glUniform3uiv @234 glUniform3uiv@12 @234
glUniform4uiv @235 glUniform4uiv@12 @235
glClearBufferiv @236 glClearBufferiv@12 @236
glClearBufferuiv @237 glClearBufferuiv@12 @237
glClearBufferfv @238 glClearBufferfv@12 @238
glClearBufferfi @239 glClearBufferfi@16 @239
glGetStringi @240 glGetStringi@8 @240
glCopyBufferSubData @241 glCopyBufferSubData@20 @241
glGetUniformIndices @242 glGetUniformIndices@16 @242
glGetActiveUniformsiv @243 glGetActiveUniformsiv@20 @243
glGetUniformBlockIndex @244 glGetUniformBlockIndex@8 @244
glGetActiveUniformBlockiv @245 glGetActiveUniformBlockiv@16 @245
glGetActiveUniformBlockName @246 glGetActiveUniformBlockName@20 @246
glUniformBlockBinding @247 glUniformBlockBinding@12 @247
glDrawArraysInstanced @248 glDrawArraysInstanced@16 @248
glDrawElementsInstanced @249 glDrawElementsInstanced@20 @249
glFenceSync @250 glFenceSync@8 @250
glIsSync @251 glIsSync@4 @251
glDeleteSync @252 glDeleteSync@4 @252
glClientWaitSync @253 glClientWaitSync@16 @253
glWaitSync @254 glWaitSync@16 @254
glGetInteger64v @255 glGetInteger64v@8 @255
glGetSynciv @256 glGetSynciv@20 @256
glGetInteger64i_v @257 glGetInteger64i_v@12 @257
glGetBufferParameteri64v @258 glGetBufferParameteri64v@12 @258
glGenSamplers @259 glGenSamplers@8 @259
glDeleteSamplers @260 glDeleteSamplers@8 @260
glIsSampler @261 glIsSampler@4 @261
glBindSampler @262 glBindSampler@8 @262
glSamplerParameteri @263 glSamplerParameteri@12 @263
glSamplerParameteriv @264 glSamplerParameteriv@12 @264
glSamplerParameterf @265 glSamplerParameterf@12 @265
glSamplerParameterfv @266 glSamplerParameterfv@12 @266
glGetSamplerParameteriv @267 glGetSamplerParameteriv@12 @267
glGetSamplerParameterfv @268 glGetSamplerParameterfv@12 @268
glVertexAttribDivisor @269 glVertexAttribDivisor@8 @269
glBindTransformFeedback @270 glBindTransformFeedback@8 @270
glDeleteTransformFeedbacks @271 glDeleteTransformFeedbacks@8 @271
glGenTransformFeedbacks @272 glGenTransformFeedbacks@8 @272
glIsTransformFeedback @273 glIsTransformFeedback@4 @273
glPauseTransformFeedback @274 glPauseTransformFeedback@0 @274
glResumeTransformFeedback @275 glResumeTransformFeedback@0 @275
glGetProgramBinary @276 glGetProgramBinary@20 @276
glProgramBinary @277 glProgramBinary@16 @277
glProgramParameteri @278 glProgramParameteri@12 @278
glInvalidateFramebuffer @279 glInvalidateFramebuffer@12 @279
glInvalidateSubFramebuffer @280 glInvalidateSubFramebuffer@28 @280
glTexStorage2D @281 glTexStorage2D@20 @281
glTexStorage3D @282 glTexStorage3D@24 @282
glGetInternalformativ @283 glGetInternalformativ@20 @283
; GLES 3.1 Functions ; GLES 3.1 Functions
glDispatchCompute @345 glDispatchCompute@12 @345
glDispatchComputeIndirect @346 glDispatchComputeIndirect@4 @346
glDrawArraysIndirect @347 glDrawArraysIndirect@8 @347
glDrawElementsIndirect @348 glDrawElementsIndirect@12 @348
glFramebufferParameteri @349 glFramebufferParameteri@12 @349
glGetFramebufferParameteriv @350 glGetFramebufferParameteriv@12 @350
glGetProgramInterfaceiv @351 glGetProgramInterfaceiv@16 @351
glGetProgramResourceIndex @352 glGetProgramResourceIndex@12 @352
glGetProgramResourceName @353 glGetProgramResourceName@24 @353
glGetProgramResourceiv @354 glGetProgramResourceiv@32 @354
glGetProgramResourceLocation @355 glGetProgramResourceLocation@12 @355
glUseProgramStages @356 glUseProgramStages@12 @356
glActiveShaderProgram @357 glActiveShaderProgram@8 @357
glCreateShaderProgramv @358 glCreateShaderProgramv@12 @358
glBindProgramPipeline @359 glBindProgramPipeline@4 @359
glDeleteProgramPipelines @360 glDeleteProgramPipelines@8 @360
glGenProgramPipelines @361 glGenProgramPipelines@8 @361
glIsProgramPipeline @362 glIsProgramPipeline@4 @362
glGetProgramPipelineiv @363 glGetProgramPipelineiv@12 @363
glProgramUniform1i @364 glProgramUniform1i@12 @364
glProgramUniform2i @365 glProgramUniform2i@16 @365
glProgramUniform3i @366 glProgramUniform3i@20 @366
glProgramUniform4i @367 glProgramUniform4i@24 @367
glProgramUniform1ui @368 glProgramUniform1ui@12 @368
glProgramUniform2ui @369 glProgramUniform2ui@16 @369
glProgramUniform3ui @370 glProgramUniform3ui@20 @370
glProgramUniform4ui @371 glProgramUniform4ui@24 @371
glProgramUniform1f @372 glProgramUniform1f@12 @372
glProgramUniform2f @373 glProgramUniform2f@16 @373
glProgramUniform3f @374 glProgramUniform3f@20 @374
glProgramUniform4f @375 glProgramUniform4f@24 @375
glProgramUniform1iv @376 glProgramUniform1iv@16 @376
glProgramUniform2iv @377 glProgramUniform2iv@16 @377
glProgramUniform3iv @378 glProgramUniform3iv@16 @378
glProgramUniform4iv @379 glProgramUniform4iv@16 @379
glProgramUniform1uiv @380 glProgramUniform1uiv@16 @380
glProgramUniform2uiv @381 glProgramUniform2uiv@16 @381
glProgramUniform3uiv @382 glProgramUniform3uiv@16 @382
glProgramUniform4uiv @383 glProgramUniform4uiv@16 @383
glProgramUniform1fv @384 glProgramUniform1fv@16 @384
glProgramUniform2fv @385 glProgramUniform2fv@16 @385
glProgramUniform3fv @386 glProgramUniform3fv@16 @386
glProgramUniform4fv @387 glProgramUniform4fv@16 @387
glProgramUniformMatrix2fv @388 glProgramUniformMatrix2fv@20 @388
glProgramUniformMatrix3fv @389 glProgramUniformMatrix3fv@20 @389
glProgramUniformMatrix4fv @390 glProgramUniformMatrix4fv@20 @390
glProgramUniformMatrix2x3fv @391 glProgramUniformMatrix2x3fv@20 @391
glProgramUniformMatrix3x2fv @392 glProgramUniformMatrix3x2fv@20 @392
glProgramUniformMatrix2x4fv @393 glProgramUniformMatrix2x4fv@20 @393
glProgramUniformMatrix4x2fv @394 glProgramUniformMatrix4x2fv@20 @394
glProgramUniformMatrix3x4fv @395 glProgramUniformMatrix3x4fv@20 @395
glProgramUniformMatrix4x3fv @396 glProgramUniformMatrix4x3fv@20 @396
glValidateProgramPipeline @397 glValidateProgramPipeline@4 @397
glGetProgramPipelineInfoLog @398 glGetProgramPipelineInfoLog@16 @398
glBindImageTexture @399 glBindImageTexture@28 @399
glGetBooleani_v @400 glGetBooleani_v@12 @400
glMemoryBarrier @401 glMemoryBarrier@4 @401
glMemoryBarrierByRegion @402 glMemoryBarrierByRegion@4 @402
glTexStorage2DMultisample @403 glTexStorage2DMultisample@24 @403
glGetMultisamplefv @404 glGetMultisamplefv@12 @404
glSampleMaski @405 glSampleMaski@8 @405
glGetTexLevelParameteriv @406 glGetTexLevelParameteriv@16 @406
glGetTexLevelParameterfv @407 glGetTexLevelParameterfv@16 @407
glBindVertexBuffer @408 glBindVertexBuffer@16 @408
glVertexAttribFormat @409 glVertexAttribFormat@20 @409
glVertexAttribIFormat @410 glVertexAttribIFormat@16 @410
glVertexAttribBinding @411 glVertexAttribBinding@8 @411
glVertexBindingDivisor @412 glVertexBindingDivisor@8 @412

View File

@ -1,412 +1,411 @@
LIBRARY libGLESv2 LIBRARY libGLESv2
EXPORTS EXPORTS
glActiveTexture @1 glActiveTexture@4 @1
glAttachShader @2 glAttachShader@8 @2
glBindAttribLocation @3 glBindAttribLocation@12 @3
glBindBuffer @4 glBindBuffer@8 @4
glBindFramebuffer @5 glBindFramebuffer@8 @5
glBindRenderbuffer @6 glBindRenderbuffer@8 @6
glBindTexture @7 glBindTexture@8 @7
glBlendColor @8 glBlendColor@16 @8
glBlendEquation @9 glBlendEquation@4 @9
glBlendEquationSeparate @10 glBlendEquationSeparate@8 @10
glBlendFunc @11 glBlendFunc@8 @11
glBlendFuncSeparate @12 glBlendFuncSeparate@16 @12
glBufferData @13 glBufferData@16 @13
glBufferSubData @14 glBufferSubData@16 @14
glCheckFramebufferStatus @15 glCheckFramebufferStatus@4 @15
glClear @16 glClear@4 @16
glClearColor @17 glClearColor@16 @17
glClearDepthf @18 glClearDepthf@4 @18
glClearStencil @19 glClearStencil@4 @19
glColorMask @20 glColorMask@16 @20
glCompileShader @21 glCompileShader@4 @21
glCompressedTexImage2D @22 glCompressedTexImage2D@32 @22
glCompressedTexSubImage2D @23 glCompressedTexSubImage2D@36 @23
glCopyTexImage2D @24 glCopyTexImage2D@32 @24
glCopyTexSubImage2D @25 glCopyTexSubImage2D@32 @25
glCreateProgram @26 glCreateProgram@0 @26
glCreateShader @27 glCreateShader@4 @27
glCullFace @28 glCullFace@4 @28
glDeleteBuffers @29 glDeleteBuffers@8 @29
glDeleteFramebuffers @30 glDeleteFramebuffers@8 @30
glDeleteProgram @32 glDeleteProgram@4 @32
glDeleteRenderbuffers @33 glDeleteRenderbuffers@8 @33
glDeleteShader @34 glDeleteShader@4 @34
glDeleteTextures @31 glDeleteTextures@8 @31
glDepthFunc @36 glDepthFunc@4 @36
glDepthMask @37 glDepthMask@4 @37
glDepthRangef @38 glDepthRangef@8 @38
glDetachShader @35 glDetachShader@8 @35
glDisable @39 glDisable@4 @39
glDisableVertexAttribArray @40 glDisableVertexAttribArray@4 @40
glDrawArrays @41 glDrawArrays@12 @41
glDrawElements @42 glDrawElements@16 @42
glEnable @43 glEnable@4 @43
glEnableVertexAttribArray @44 glEnableVertexAttribArray@4 @44
glFinish @45 glFinish@0 @45
glFlush @46 glFlush@0 @46
glFramebufferRenderbuffer @47 glFramebufferRenderbuffer@16 @47
glFramebufferTexture2D @48 glFramebufferTexture2D@20 @48
glFrontFace @49 glFrontFace@4 @49
glGenBuffers @50 glGenBuffers@8 @50
glGenFramebuffers @52 glGenFramebuffers@8 @52
glGenRenderbuffers @53 glGenRenderbuffers@8 @53
glGenTextures @54 glGenTextures@8 @54
glGenerateMipmap @51 glGenerateMipmap@4 @51
glGetActiveAttrib @55 glGetActiveAttrib@28 @55
glGetActiveUniform @56 glGetActiveUniform@28 @56
glGetAttachedShaders @57 glGetAttachedShaders@16 @57
glGetAttribLocation @58 glGetAttribLocation@8 @58
glGetBooleanv @59 glGetBooleanv@8 @59
glGetBufferParameteriv @60 glGetBufferParameteriv@12 @60
glGetError @61 glGetError@0 @61
glGetFloatv @62 glGetFloatv@8 @62
glGetFramebufferAttachmentParameteriv @63 glGetFramebufferAttachmentParameteriv@16 @63
glGetIntegerv @64 glGetIntegerv@8 @64
glGetProgramInfoLog @66 glGetProgramInfoLog@16 @66
glGetProgramiv @65 glGetProgramiv@12 @65
glGetRenderbufferParameteriv @67 glGetRenderbufferParameteriv@12 @67
glGetShaderInfoLog @69 glGetShaderInfoLog@16 @69
glGetShaderPrecisionFormat @70 glGetShaderPrecisionFormat@16 @70
glGetShaderSource @71 glGetShaderSource@16 @71
glGetShaderiv @68 glGetShaderiv@12 @68
glGetString @72 glGetString@4 @72
glGetTexParameterfv @73 glGetTexParameterfv@12 @73
glGetTexParameteriv @74 glGetTexParameteriv@12 @74
glGetUniformLocation @77 glGetUniformLocation@8 @77
glGetUniformfv @75 glGetUniformfv@12 @75
glGetUniformiv @76 glGetUniformiv@12 @76
glGetVertexAttribPointerv @80 glGetVertexAttribPointerv@12 @80
glGetVertexAttribfv @78 glGetVertexAttribfv@12 @78
glGetVertexAttribiv @79 glGetVertexAttribiv@12 @79
glHint @81 glHint@8 @81
glIsBuffer @82 glIsBuffer@4 @82
glIsEnabled @83 glIsEnabled@4 @83
glIsFramebuffer @84 glIsFramebuffer@4 @84
glIsProgram @85 glIsProgram@4 @85
glIsRenderbuffer @86 glIsRenderbuffer@4 @86
glIsShader @87 glIsShader@4 @87
glIsTexture @88 glIsTexture@4 @88
glLineWidth @89 glLineWidth@4 @89
glLinkProgram @90 glLinkProgram@4 @90
glPixelStorei @91 glPixelStorei@8 @91
glPolygonOffset @92 glPolygonOffset@8 @92
glReadPixels @93 glReadPixels@28 @93
glReleaseShaderCompiler @94 glReleaseShaderCompiler@0 @94
glRenderbufferStorage @95 glRenderbufferStorage@16 @95
glSampleCoverage @96 glSampleCoverage@8 @96
glScissor @97 glScissor@16 @97
glShaderBinary @98 glShaderBinary@20 @98
glShaderSource @99 glShaderSource@16 @99
glStencilFunc @100 glStencilFunc@12 @100
glStencilFuncSeparate @101 glStencilFuncSeparate@16 @101
glStencilMask @102 glStencilMask@4 @102
glStencilMaskSeparate @103 glStencilMaskSeparate@8 @103
glStencilOp @104 glStencilOp@12 @104
glStencilOpSeparate @105 glStencilOpSeparate@16 @105
glTexImage2D @106 glTexImage2D@36 @106
glTexParameterf @107 glTexParameterf@12 @107
glTexParameterfv @108 glTexParameterfv@12 @108
glTexParameteri @109 glTexParameteri@12 @109
glTexParameteriv @110 glTexParameteriv@12 @110
glTexSubImage2D @111 glTexSubImage2D@36 @111
glUniform1f @112 glUniform1f@8 @112
glUniform1fv @113 glUniform1fv@12 @113
glUniform1i @114 glUniform1i@8 @114
glUniform1iv @115 glUniform1iv@12 @115
glUniform2f @116 glUniform2f@12 @116
glUniform2fv @117 glUniform2fv@12 @117
glUniform2i @118 glUniform2i@12 @118
glUniform2iv @119 glUniform2iv@12 @119
glUniform3f @120 glUniform3f@16 @120
glUniform3fv @121 glUniform3fv@12 @121
glUniform3i @122 glUniform3i@16 @122
glUniform3iv @123 glUniform3iv@12 @123
glUniform4f @124 glUniform4f@20 @124
glUniform4fv @125 glUniform4fv@12 @125
glUniform4i @126 glUniform4i@20 @126
glUniform4iv @127 glUniform4iv@12 @127
glUniformMatrix2fv @128 glUniformMatrix2fv@16 @128
glUniformMatrix3fv @129 glUniformMatrix3fv@16 @129
glUniformMatrix4fv @130 glUniformMatrix4fv@16 @130
glUseProgram @131 glUseProgram@4 @131
glValidateProgram @132 glValidateProgram@4 @132
glVertexAttrib1f @133 glVertexAttrib1f@8 @133
glVertexAttrib1fv @134 glVertexAttrib1fv@8 @134
glVertexAttrib2f @135 glVertexAttrib2f@12 @135
glVertexAttrib2fv @136 glVertexAttrib2fv@8 @136
glVertexAttrib3f @137 glVertexAttrib3f@16 @137
glVertexAttrib3fv @138 glVertexAttrib3fv@8 @138
glVertexAttrib4f @139 glVertexAttrib4f@20 @139
glVertexAttrib4fv @140 glVertexAttrib4fv@8 @140
glVertexAttribPointer @141 glVertexAttribPointer@24 @141
glViewport @142 glViewport@16 @142
; Extensions ; Extensions
glBlitFramebufferANGLE @149 glBlitFramebufferANGLE@40 @149
glRenderbufferStorageMultisampleANGLE @150 glRenderbufferStorageMultisampleANGLE@20 @150
glDeleteFencesNV @151 glDeleteFencesNV@8 @151
glFinishFenceNV @152 glFinishFenceNV@4 @152
glGenFencesNV @153 glGenFencesNV@8 @153
glGetFenceivNV @154 glGetFenceivNV@12 @154
glIsFenceNV @155 glIsFenceNV@4 @155
glSetFenceNV @156 glSetFenceNV@8 @156
glTestFenceNV @157 glTestFenceNV@4 @157
glGetTranslatedShaderSourceANGLE @159 glGetTranslatedShaderSourceANGLE@16 @159
glTexStorage2DEXT @160 glTexStorage2DEXT@20 @160
glGetGraphicsResetStatusEXT @161 glGetGraphicsResetStatusEXT@0 @161
glReadnPixelsEXT @162 glReadnPixelsEXT@32 @162
glGetnUniformfvEXT @163 glGetnUniformfvEXT@16 @163
glGetnUniformivEXT @164 glGetnUniformivEXT@16 @164
glGenQueriesEXT @165 glGenQueriesEXT@8 @165
glDeleteQueriesEXT @166 glDeleteQueriesEXT@8 @166
glIsQueryEXT @167 glIsQueryEXT@4 @167
glBeginQueryEXT @168 glBeginQueryEXT@8 @168
glEndQueryEXT @169 glEndQueryEXT@4 @169
glGetQueryivEXT @170 glGetQueryivEXT@12 @170
glGetQueryObjectuivEXT @171 glGetQueryObjectuivEXT@12 @171
glVertexAttribDivisorANGLE @172 glVertexAttribDivisorANGLE@8 @172
glDrawArraysInstancedANGLE @173 glDrawArraysInstancedANGLE@16 @173
glDrawElementsInstancedANGLE @174 glDrawElementsInstancedANGLE@20 @174
glProgramBinaryOES @175 glProgramBinaryOES@16 @175
glGetProgramBinaryOES @176 glGetProgramBinaryOES@20 @176
glDrawBuffersEXT @179 glDrawBuffersEXT@8 @179
glMapBufferOES @285 glMapBufferOES@8 @285
glUnmapBufferOES @286 glUnmapBufferOES@4 @286
glGetBufferPointervOES @287 glGetBufferPointervOES@12 @287
glMapBufferRangeEXT @288 glMapBufferRangeEXT@16 @288
glFlushMappedBufferRangeEXT @289 glFlushMappedBufferRangeEXT@12 @289
glDiscardFramebufferEXT @293 glDiscardFramebufferEXT@12 @293
glInsertEventMarkerEXT @294 glInsertEventMarkerEXT@8 @294
glPushGroupMarkerEXT @295 glPushGroupMarkerEXT@8 @295
glPopGroupMarkerEXT @296 glPopGroupMarkerEXT@0 @296
glEGLImageTargetTexture2DOES @297 glEGLImageTargetTexture2DOES@8 @297
glEGLImageTargetRenderbufferStorageOES @298 glEGLImageTargetRenderbufferStorageOES@8 @298
glBindVertexArrayOES @299 glBindVertexArrayOES@4 @299
glDeleteVertexArraysOES @300 glDeleteVertexArraysOES@8 @300
glGenVertexArraysOES @301 glGenVertexArraysOES@8 @301
glIsVertexArrayOES @302 glIsVertexArrayOES@4 @302
glDebugMessageControlKHR @303 glDebugMessageControlKHR@24 @303
glDebugMessageInsertKHR @304 glDebugMessageInsertKHR@24 @304
glDebugMessageCallbackKHR @305 glDebugMessageCallbackKHR@8 @305
glGetDebugMessageLogKHR @306 glGetDebugMessageLogKHR@32 @306
glPushDebugGroupKHR @307 glPushDebugGroupKHR@16 @307
glPopDebugGroupKHR @308 glPopDebugGroupKHR@0 @308
glObjectLabelKHR @309 glObjectLabelKHR@16 @309
glGetObjectLabelKHR @310 glGetObjectLabelKHR@20 @310
glObjectPtrLabelKHR @311 glObjectPtrLabelKHR@12 @311
glGetObjectPtrLabelKHR @312 glGetObjectPtrLabelKHR@16 @312
glGetPointervKHR @313 glGetPointervKHR@8 @313
glQueryCounterEXT @314 glQueryCounterEXT@8 @314
glGetQueryObjectivEXT @315 glGetQueryObjectivEXT@12 @315
glGetQueryObjecti64vEXT @316 glGetQueryObjecti64vEXT@12 @316
glGetQueryObjectui64vEXT @317 glGetQueryObjectui64vEXT@12 @317
glBindUniformLocationCHROMIUM @318 glBindUniformLocationCHROMIUM@12 @318
glCoverageModulationCHROMIUM @319 glCoverageModulationCHROMIUM@4 @319
glMatrixLoadfCHROMIUM@8 @320
glMatrixLoadIdentityCHROMIUM@4 @321
glGenPathsCHROMIUM@4 @322
glDeletePathsCHROMIUM@8 @323
glIsPathCHROMIUM@4 @324
glPathCommandsCHROMIUM@24 @325
glPathParameterfCHROMIUM@12 @326
glPathParameteriCHROMIUM@12 @327
glGetPathParameterfvCHROMIUM@12 @328
glGetPathParameterivCHROMIUM@12 @329
glPathStencilFuncCHROMIUM@12 @330
glStencilFillPathCHROMIUM@12 @331
glStencilStrokePathCHROMIUM@12 @332
glCoverFillPathCHROMIUM@8 @333
glCoverStrokePathCHROMIUM@8 @334
glStencilThenCoverFillPathCHROMIUM@16 @335
glStencilThenCoverStrokePathCHROMIUM@16 @336
glCoverFillPathInstancedCHROMIUM@28 @337
glCoverStrokePathInstancedCHROMIUM@28 @338
glStencilStrokePathInstancedCHROMIUM@32 @339
glStencilFillPathInstancedCHROMIUM@32 @340
glStencilThenCoverFillPathInstancedCHROMIUM@36 @341
glStencilThenCoverStrokePathInstancedCHROMIUM@36 @342
glBindFragmentInputLocationCHROMIUM@12 @343
glProgramPathFragmentInputGenCHROMIUM@20 @344
glMatrixLoadfCHROMIUM @320 glFramebufferTextureMultiviewLayeredANGLE@24 @413
glMatrixLoadIdentityCHROMIUM @321 glFramebufferTextureMultiviewSideBySideANGLE@24 @414
glGenPathsCHROMIUM @322 glRequestExtensionANGLE@4 @415
glDeletePathsCHROMIUM @323
glIsPathCHROMIUM @324
glPathCommandsCHROMIUM @325
glPathParameterfCHROMIUM @326
glPathParameteriCHROMIUM @327
glGetPathParameterfvCHROMIUM @328
glGetPathParameterivCHROMIUM @329
glPathStencilFuncCHROMIUM @330
glStencilFillPathCHROMIUM @331
glStencilStrokePathCHROMIUM @332
glCoverFillPathCHROMIUM @333
glCoverStrokePathCHROMIUM @334
glStencilThenCoverFillPathCHROMIUM @335
glStencilThenCoverStrokePathCHROMIUM @336
glCoverFillPathInstancedCHROMIUM @337
glCoverStrokePathInstancedCHROMIUM @338
glStencilStrokePathInstancedCHROMIUM @339
glStencilFillPathInstancedCHROMIUM @340
glStencilThenCoverFillPathInstancedCHROMIUM @341
glStencilThenCoverStrokePathInstancedCHROMIUM @342
glBindFragmentInputLocationCHROMIUM @343
glProgramPathFragmentInputGenCHROMIUM @344
glFramebufferTextureMultiviewLayeredANGLE @413
glFramebufferTextureMultiviewSideBySideANGLE @414
glRequestExtensionANGLE @415
; GLES 3.0 Functions ; GLES 3.0 Functions
glReadBuffer @180 glReadBuffer@4 @180
glDrawRangeElements @181 glDrawRangeElements@24 @181
glTexImage3D @182 glTexImage3D@40 @182
glTexSubImage3D @183 glTexSubImage3D@44 @183
glCopyTexSubImage3D @184 glCopyTexSubImage3D@36 @184
glCompressedTexImage3D @185 glCompressedTexImage3D@36 @185
glCompressedTexSubImage3D @186 glCompressedTexSubImage3D@44 @186
glGenQueries @187 glGenQueries@8 @187
glDeleteQueries @188 glDeleteQueries@8 @188
glIsQuery @189 glIsQuery@4 @189
glBeginQuery @190 glBeginQuery@8 @190
glEndQuery @191 glEndQuery@4 @191
glGetQueryiv @192 glGetQueryiv@12 @192
glGetQueryObjectuiv @193 glGetQueryObjectuiv@12 @193
glUnmapBuffer @194 glUnmapBuffer@4 @194
glGetBufferPointerv @195 glGetBufferPointerv@12 @195
glDrawBuffers @196 glDrawBuffers@8 @196
glUniformMatrix2x3fv @197 glUniformMatrix2x3fv@16 @197
glUniformMatrix3x2fv @198 glUniformMatrix3x2fv@16 @198
glUniformMatrix2x4fv @199 glUniformMatrix2x4fv@16 @199
glUniformMatrix4x2fv @200 glUniformMatrix4x2fv@16 @200
glUniformMatrix3x4fv @201 glUniformMatrix3x4fv@16 @201
glUniformMatrix4x3fv @202 glUniformMatrix4x3fv@16 @202
glBlitFramebuffer @203 glBlitFramebuffer@40 @203
glRenderbufferStorageMultisample @204 glRenderbufferStorageMultisample@20 @204
glFramebufferTextureLayer @205 glFramebufferTextureLayer@20 @205
glMapBufferRange @206 glMapBufferRange@16 @206
glFlushMappedBufferRange @207 glFlushMappedBufferRange@12 @207
glBindVertexArray @208 glBindVertexArray@4 @208
glDeleteVertexArrays @209 glDeleteVertexArrays@8 @209
glGenVertexArrays @210 glGenVertexArrays@8 @210
glIsVertexArray @211 glIsVertexArray@4 @211
glGetIntegeri_v @212 glGetIntegeri_v@12 @212
glBeginTransformFeedback @213 glBeginTransformFeedback@4 @213
glEndTransformFeedback @214 glEndTransformFeedback@0 @214
glBindBufferRange @215 glBindBufferRange@20 @215
glBindBufferBase @216 glBindBufferBase@12 @216
glTransformFeedbackVaryings @217 glTransformFeedbackVaryings@16 @217
glGetTransformFeedbackVarying @218 glGetTransformFeedbackVarying@28 @218
glVertexAttribIPointer @219 glVertexAttribIPointer@20 @219
glGetVertexAttribIiv @220 glGetVertexAttribIiv@12 @220
glGetVertexAttribIuiv @221 glGetVertexAttribIuiv@12 @221
glVertexAttribI4i @222 glVertexAttribI4i@20 @222
glVertexAttribI4ui @223 glVertexAttribI4ui@20 @223
glVertexAttribI4iv @224 glVertexAttribI4iv@8 @224
glVertexAttribI4uiv @225 glVertexAttribI4uiv@8 @225
glGetUniformuiv @226 glGetUniformuiv@12 @226
glGetFragDataLocation @227 glGetFragDataLocation@8 @227
glUniform1ui @228 glUniform1ui@8 @228
glUniform2ui @229 glUniform2ui@12 @229
glUniform3ui @230 glUniform3ui@16 @230
glUniform4ui @231 glUniform4ui@20 @231
glUniform1uiv @232 glUniform1uiv@12 @232
glUniform2uiv @233 glUniform2uiv@12 @233
glUniform3uiv @234 glUniform3uiv@12 @234
glUniform4uiv @235 glUniform4uiv@12 @235
glClearBufferiv @236 glClearBufferiv@12 @236
glClearBufferuiv @237 glClearBufferuiv@12 @237
glClearBufferfv @238 glClearBufferfv@12 @238
glClearBufferfi @239 glClearBufferfi@16 @239
glGetStringi @240 glGetStringi@8 @240
glCopyBufferSubData @241 glCopyBufferSubData@20 @241
glGetUniformIndices @242 glGetUniformIndices@16 @242
glGetActiveUniformsiv @243 glGetActiveUniformsiv@20 @243
glGetUniformBlockIndex @244 glGetUniformBlockIndex@8 @244
glGetActiveUniformBlockiv @245 glGetActiveUniformBlockiv@16 @245
glGetActiveUniformBlockName @246 glGetActiveUniformBlockName@20 @246
glUniformBlockBinding @247 glUniformBlockBinding@12 @247
glDrawArraysInstanced @248 glDrawArraysInstanced@16 @248
glDrawElementsInstanced @249 glDrawElementsInstanced@20 @249
glFenceSync @250 glFenceSync@8 @250
glIsSync @251 glIsSync@4 @251
glDeleteSync @252 glDeleteSync@4 @252
glClientWaitSync @253 glClientWaitSync@16 @253
glWaitSync @254 glWaitSync@16 @254
glGetInteger64v @255 glGetInteger64v@8 @255
glGetSynciv @256 glGetSynciv@20 @256
glGetInteger64i_v @257 glGetInteger64i_v@12 @257
glGetBufferParameteri64v @258 glGetBufferParameteri64v@12 @258
glGenSamplers @259 glGenSamplers@8 @259
glDeleteSamplers @260 glDeleteSamplers@8 @260
glIsSampler @261 glIsSampler@4 @261
glBindSampler @262 glBindSampler@8 @262
glSamplerParameteri @263 glSamplerParameteri@12 @263
glSamplerParameteriv @264 glSamplerParameteriv@12 @264
glSamplerParameterf @265 glSamplerParameterf@12 @265
glSamplerParameterfv @266 glSamplerParameterfv@12 @266
glGetSamplerParameteriv @267 glGetSamplerParameteriv@12 @267
glGetSamplerParameterfv @268 glGetSamplerParameterfv@12 @268
glVertexAttribDivisor @269 glVertexAttribDivisor@8 @269
glBindTransformFeedback @270 glBindTransformFeedback@8 @270
glDeleteTransformFeedbacks @271 glDeleteTransformFeedbacks@8 @271
glGenTransformFeedbacks @272 glGenTransformFeedbacks@8 @272
glIsTransformFeedback @273 glIsTransformFeedback@4 @273
glPauseTransformFeedback @274 glPauseTransformFeedback@0 @274
glResumeTransformFeedback @275 glResumeTransformFeedback@0 @275
glGetProgramBinary @276 glGetProgramBinary@20 @276
glProgramBinary @277 glProgramBinary@16 @277
glProgramParameteri @278 glProgramParameteri@12 @278
glInvalidateFramebuffer @279 glInvalidateFramebuffer@12 @279
glInvalidateSubFramebuffer @280 glInvalidateSubFramebuffer@28 @280
glTexStorage2D @281 glTexStorage2D@20 @281
glTexStorage3D @282 glTexStorage3D@24 @282
glGetInternalformativ @283 glGetInternalformativ@20 @283
; GLES 3.1 Functions ; GLES 3.1 Functions
glDispatchCompute @345 glDispatchCompute@12 @345
glDispatchComputeIndirect @346 glDispatchComputeIndirect@4 @346
glDrawArraysIndirect @347 glDrawArraysIndirect@8 @347
glDrawElementsIndirect @348 glDrawElementsIndirect@12 @348
glFramebufferParameteri @349 glFramebufferParameteri@12 @349
glGetFramebufferParameteriv @350 glGetFramebufferParameteriv@12 @350
glGetProgramInterfaceiv @351 glGetProgramInterfaceiv@16 @351
glGetProgramResourceIndex @352 glGetProgramResourceIndex@12 @352
glGetProgramResourceName @353 glGetProgramResourceName@24 @353
glGetProgramResourceiv @354 glGetProgramResourceiv@32 @354
glGetProgramResourceLocation @355 glGetProgramResourceLocation@12 @355
glUseProgramStages @356 glUseProgramStages@12 @356
glActiveShaderProgram @357 glActiveShaderProgram@8 @357
glCreateShaderProgramv @358 glCreateShaderProgramv@12 @358
glBindProgramPipeline @359 glBindProgramPipeline@4 @359
glDeleteProgramPipelines @360 glDeleteProgramPipelines@8 @360
glGenProgramPipelines @361 glGenProgramPipelines@8 @361
glIsProgramPipeline @362 glIsProgramPipeline@4 @362
glGetProgramPipelineiv @363 glGetProgramPipelineiv@12 @363
glProgramUniform1i @364 glProgramUniform1i@12 @364
glProgramUniform2i @365 glProgramUniform2i@16 @365
glProgramUniform3i @366 glProgramUniform3i@20 @366
glProgramUniform4i @367 glProgramUniform4i@24 @367
glProgramUniform1ui @368 glProgramUniform1ui@12 @368
glProgramUniform2ui @369 glProgramUniform2ui@16 @369
glProgramUniform3ui @370 glProgramUniform3ui@20 @370
glProgramUniform4ui @371 glProgramUniform4ui@24 @371
glProgramUniform1f @372 glProgramUniform1f@12 @372
glProgramUniform2f @373 glProgramUniform2f@16 @373
glProgramUniform3f @374 glProgramUniform3f@20 @374
glProgramUniform4f @375 glProgramUniform4f@24 @375
glProgramUniform1iv @376 glProgramUniform1iv@16 @376
glProgramUniform2iv @377 glProgramUniform2iv@16 @377
glProgramUniform3iv @378 glProgramUniform3iv@16 @378
glProgramUniform4iv @379 glProgramUniform4iv@16 @379
glProgramUniform1uiv @380 glProgramUniform1uiv@16 @380
glProgramUniform2uiv @381 glProgramUniform2uiv@16 @381
glProgramUniform3uiv @382 glProgramUniform3uiv@16 @382
glProgramUniform4uiv @383 glProgramUniform4uiv@16 @383
glProgramUniform1fv @384 glProgramUniform1fv@16 @384
glProgramUniform2fv @385 glProgramUniform2fv@16 @385
glProgramUniform3fv @386 glProgramUniform3fv@16 @386
glProgramUniform4fv @387 glProgramUniform4fv@16 @387
glProgramUniformMatrix2fv @388 glProgramUniformMatrix2fv@20 @388
glProgramUniformMatrix3fv @389 glProgramUniformMatrix3fv@20 @389
glProgramUniformMatrix4fv @390 glProgramUniformMatrix4fv@20 @390
glProgramUniformMatrix2x3fv @391 glProgramUniformMatrix2x3fv@20 @391
glProgramUniformMatrix3x2fv @392 glProgramUniformMatrix3x2fv@20 @392
glProgramUniformMatrix2x4fv @393 glProgramUniformMatrix2x4fv@20 @393
glProgramUniformMatrix4x2fv @394 glProgramUniformMatrix4x2fv@20 @394
glProgramUniformMatrix3x4fv @395 glProgramUniformMatrix3x4fv@20 @395
glProgramUniformMatrix4x3fv @396 glProgramUniformMatrix4x3fv@20 @396
glValidateProgramPipeline @397 glValidateProgramPipeline@4 @397
glGetProgramPipelineInfoLog @398 glGetProgramPipelineInfoLog@16 @398
glBindImageTexture @399 glBindImageTexture@28 @399
glGetBooleani_v @400 glGetBooleani_v@12 @400
glMemoryBarrier @401 glMemoryBarrier@4 @401
glMemoryBarrierByRegion @402 glMemoryBarrierByRegion@4 @402
glTexStorage2DMultisample @403 glTexStorage2DMultisample@24 @403
glGetMultisamplefv @404 glGetMultisamplefv@12 @404
glSampleMaski @405 glSampleMaski@8 @405
glGetTexLevelParameteriv @406 glGetTexLevelParameteriv@16 @406
glGetTexLevelParameterfv @407 glGetTexLevelParameterfv@16 @407
glBindVertexBuffer @408 glBindVertexBuffer@16 @408
glVertexAttribFormat @409 glVertexAttribFormat@20 @409
glVertexAttribIFormat @410 glVertexAttribIFormat@16 @410
glVertexAttribBinding @411 glVertexAttribBinding@8 @411
glVertexBindingDivisor @412 glVertexBindingDivisor@8 @412

View File

@ -138,10 +138,10 @@
T is the same type as the return value of \a function. Non-void return T is the same type as the return value of \a function. Non-void return
values can be accessed via the QFuture::result() function. values can be accessed via the QFuture::result() function.
Note that the QFuture returned by QtConcurrent::run() does not support \note The QFuture returned can only be used to query for the
canceling, pausing, or progress reporting. The QFuture returned can only running/finished status and the return value of the function. In particular,
be used to query for the running/finished status and the return value of canceling or pausing can be issued only if the computations behind the future
the function. has not been started.
\sa {Concurrent Run} \sa {Concurrent Run}
*/ */
@ -157,10 +157,10 @@
T is the same type as the return value of \a function. Non-void return T is the same type as the return value of \a function. Non-void return
values can be accessed via the QFuture::result() function. values can be accessed via the QFuture::result() function.
Note that the QFuture returned by QtConcurrent::run() does not support \note The QFuture returned can only be used to query for the
canceling, pausing, or progress reporting. The QFuture returned can only running/finished status and the return value of the function. In particular,
be used to query for the running/finished status and the return value of canceling or pausing can be issued only if the computations behind the future
the function. has not been started.
\sa {Concurrent Run} \sa {Concurrent Run}
*/ */

View File

@ -984,7 +984,11 @@ void QCoreApplication::setAttribute(Qt::ApplicationAttribute attribute, bool on)
QCoreApplicationPrivate::attribs |= 1 << attribute; QCoreApplicationPrivate::attribs |= 1 << attribute;
else else
QCoreApplicationPrivate::attribs &= ~(1 << attribute); QCoreApplicationPrivate::attribs &= ~(1 << attribute);
#if defined(QT_NO_QOBJECT)
if (Q_UNLIKELY(qApp)) { if (Q_UNLIKELY(qApp)) {
#else
if (Q_UNLIKELY(QCoreApplicationPrivate::is_app_running)) {
#endif
switch (attribute) { switch (attribute) {
case Qt::AA_EnableHighDpiScaling: case Qt::AA_EnableHighDpiScaling:
case Qt::AA_DisableHighDpiScaling: case Qt::AA_DisableHighDpiScaling:

View File

@ -55,8 +55,8 @@
instance, the computation can be canceled with the cancel() function. To instance, the computation can be canceled with the cancel() function. To
pause the computation, use the setPaused() function or one of the pause(), pause the computation, use the setPaused() function or one of the pause(),
resume(), or togglePaused() convenience functions. Be aware that not all resume(), or togglePaused() convenience functions. Be aware that not all
asynchronous computations can be canceled or paused. For example, the running asynchronous computations can be canceled or paused. For example,
future returned by QtConcurrent::run() cannot be canceled; but the the future returned by QtConcurrent::run() cannot be canceled; but the
future returned by QtConcurrent::mappedReduced() can. future returned by QtConcurrent::mappedReduced() can.
Progress information is provided by the progressValue(), Progress information is provided by the progressValue(),
@ -133,8 +133,8 @@
Any QFutureWatcher object that is watching this future will not deliver Any QFutureWatcher object that is watching this future will not deliver
progress and result ready signals on a canceled future. progress and result ready signals on a canceled future.
Be aware that not all asynchronous computations can be canceled. For Be aware that not all running asynchronous computations can be canceled.
example, the future returned by QtConcurrent::run() cannot be canceled; For example, the future returned by QtConcurrent::run() cannot be canceled;
but the future returned by QtConcurrent::mappedReduced() can. but the future returned by QtConcurrent::mappedReduced() can.
*/ */

View File

@ -84,8 +84,8 @@ QT_BEGIN_NAMESPACE
\snippet code/src_corelib_thread_qfuturewatcher.cpp 0 \snippet code/src_corelib_thread_qfuturewatcher.cpp 0
Be aware that not all asynchronous computations can be canceled or paused. Be aware that not all running asynchronous computations can be canceled or
For example, the future returned by QtConcurrent::run() cannot be paused. For example, the future returned by QtConcurrent::run() cannot be
canceled; but the future returned by QtConcurrent::mappedReduced() can. canceled; but the future returned by QtConcurrent::mappedReduced() can.
QFutureWatcher<void> is specialized to not contain any of the result QFutureWatcher<void> is specialized to not contain any of the result
@ -124,9 +124,9 @@ QFutureWatcherBase::QFutureWatcherBase(QObject *parent)
progressRangeChanged(), progressTextChanged(), resultReadyAt(), and progressRangeChanged(), progressTextChanged(), resultReadyAt(), and
resultsReadyAt() signals. resultsReadyAt() signals.
Be aware that not all asynchronous computations can be canceled. For Be aware that not all running asynchronous computations can be canceled.
example, the QFuture returned by QtConcurrent::run() cannot be canceled; For example, the QFuture returned by QtConcurrent::run() cannot be
but the QFuture returned by QtConcurrent::mappedReduced() can. canceled; but the QFuture returned by QtConcurrent::mappedReduced() can.
*/ */
void QFutureWatcherBase::cancel() void QFutureWatcherBase::cancel()
{ {

View File

@ -725,6 +725,12 @@ void QThread::start(Priority priority)
} }
} }
#ifdef Q_OS_INTEGRITY
if (Q_LIKELY(objectName().isEmpty()))
pthread_attr_setthreadname(&attr, metaObject()->className());
else
pthread_attr_setthreadname(&attr, objectName().toLocal8Bit());
#endif
pthread_t threadId; pthread_t threadId;
int code = pthread_create(&threadId, &attr, QThreadPrivate::start, this); int code = pthread_create(&threadId, &attr, QThreadPrivate::start, this);
if (code == EPERM) { if (code == EPERM) {

View File

@ -350,6 +350,7 @@ Q_LOGGING_CATEGORY(lcAccessibilityCore, "qt.accessibility.core");
\value MenuItem An item in a menu or menu bar. \value MenuItem An item in a menu or menu bar.
\value NoRole The object has no role. This usually indicates an invalid object. \value NoRole The object has no role. This usually indicates an invalid object.
\value Note A section whose content is parenthetic or ancillary to the main content of the resource. \value Note A section whose content is parenthetic or ancillary to the main content of the resource.
\value Notification An object that represents a notification (e.g. in the system tray). This role only has an effect on Linux.
\value PageTab A page tab that the user can select to switch to a different page in a dialog. \value PageTab A page tab that the user can select to switch to a different page in a dialog.
\value PageTabList A list of page tabs. \value PageTabList A list of page tabs.
\value Paragraph A paragraph of text (usually found in documents). \value Paragraph A paragraph of text (usually found in documents).

View File

@ -299,6 +299,7 @@ public:
Paragraph = 0x00000083, Paragraph = 0x00000083,
WebDocument = 0x00000084, WebDocument = 0x00000084,
Section = 0x00000085, Section = 0x00000085,
Notification = 0x00000086,
// IAccessible2 roles // IAccessible2 roles
// IA2_ROLE_CANVAS = 0x401, ### Qt 6 use this one instead of Canvas above // IA2_ROLE_CANVAS = 0x401, ### Qt 6 use this one instead of Canvas above

View File

@ -1319,10 +1319,12 @@ bool QImageReader::read(QImage *image)
} }
} }
// successful read; check for "@2x" file name suffix and set device pixel ratio. // successful read; check for "@Nx" file name suffix and set device pixel ratio.
static bool disable2xImageLoading = !qEnvironmentVariableIsEmpty("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING"); static bool disableNxImageLoading = !qEnvironmentVariableIsEmpty("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING");
if (!disable2xImageLoading && QFileInfo(fileName()).baseName().endsWith(QLatin1String("@2x"))) { if (!disableNxImageLoading) {
image->setDevicePixelRatio(2.0); const QByteArray suffix = QFileInfo(fileName()).baseName().right(3).toLatin1();
if (suffix.length() == 3 && suffix[0] == '@' && suffix[1] >= '2' && suffix[1] <= '9' && suffix[2] == 'x')
image->setDevicePixelRatio(suffix[1] - '0');
} }
if (autoTransform()) if (autoTransform())
qt_imageTransform(*image, transformation()); qt_imageTransform(*image, transformation());

View File

@ -400,7 +400,7 @@ QPoint QHighDpiScaling::mapPositionToGlobal(const QPoint &pos, const QPoint &win
QPoint QHighDpiScaling::mapPositionFromGlobal(const QPoint &pos, const QPoint &windowGlobalPosition, const QWindow *window) QPoint QHighDpiScaling::mapPositionFromGlobal(const QPoint &pos, const QPoint &windowGlobalPosition, const QWindow *window)
{ {
QPoint windowPosCandidate = pos - windowGlobalPosition; QPoint windowPosCandidate = pos - windowGlobalPosition;
if (QGuiApplicationPrivate::screen_list.size() <= 1) if (QGuiApplicationPrivate::screen_list.size() <= 1 || window->handle() == nullptr)
return windowPosCandidate; return windowPosCandidate;
// Device independent global (screen) space may discontiguous when high-dpi scaling // Device independent global (screen) space may discontiguous when high-dpi scaling

View File

@ -108,208 +108,114 @@ private:
namespace QHighDpi { namespace QHighDpi {
inline QPointF fromNative(const QPointF &pos, qreal scaleFactor, const QPointF &origin) template <typename T>
inline T scale(const T &value, qreal scaleFactor, QPoint origin = QPoint(0, 0))
{ {
return (pos - origin) / scaleFactor + origin; Q_UNUSED(origin)
return value * scaleFactor;
} }
inline QPointF toNative(const QPointF &pos, qreal scaleFactor, const QPointF &origin) inline QPointF scale(const QPointF &pos, qreal scaleFactor, QPointF origin = QPointF(0, 0))
{ {
return (pos - origin) * scaleFactor + origin; return (pos - origin) * scaleFactor + origin;
} }
inline QPoint fromNative(const QPoint &pos, qreal scaleFactor, const QPoint &origin) inline QPoint scale(const QPoint &pos, qreal scaleFactor, QPoint origin = QPoint(0, 0))
{
return (pos - origin) / scaleFactor + origin;
}
inline QPoint toNative(const QPoint &pos, qreal scaleFactor, const QPoint &origin)
{ {
return (pos - origin) * scaleFactor + origin; return (pos - origin) * scaleFactor + origin;
} }
inline QPoint fromNative(const QPoint &pos, qreal scaleFactor) inline QRect scale(const QRect &rect, qreal scaleFactor, QPoint origin = QPoint(0, 0))
{ {
return pos / scaleFactor; return QRect(scale(rect.topLeft(), scaleFactor, origin), scale(rect.size(), scaleFactor));
} }
inline QPoint toNative(const QPoint &pos, qreal scaleFactor) inline QRectF scale(const QRectF &rect, qreal scaleFactor, QPoint origin = QPoint(0, 0))
{ {
return pos * scaleFactor; return QRectF(scale(rect.topLeft(), scaleFactor, origin), scale(rect.size(), scaleFactor));
} }
inline QSize fromNative(const QSize &size, qreal scaleFactor) inline QMargins scale(const QMargins &margins, qreal scaleFactor, QPoint origin = QPoint(0, 0))
{ {
return size / scaleFactor; // TODO: should we round up? Q_UNUSED(origin)
return QMargins(qRound(qreal(margins.left()) * scaleFactor), qRound(qreal(margins.top()) * scaleFactor),
qRound(qreal(margins.right()) * scaleFactor), qRound(qreal(margins.bottom()) * scaleFactor));
} }
inline QSize toNative(const QSize &size, qreal scaleFactor) template <typename T>
QVector<T> scale(const QVector<T> &vector, qreal scaleFactor, QPoint origin = QPoint(0, 0))
{ {
return size * scaleFactor; if (!QHighDpiScaling::isActive())
return vector;
QVector<T> scaled;
scaled.reserve(vector.size());
for (const T &item : vector)
scaled.append(scale(item, scaleFactor, origin));
return scaled;
} }
inline QSizeF fromNative(const QSizeF &size, qreal scaleFactor) inline QRegion scale(const QRegion &region, qreal scaleFactor, QPoint origin = QPoint(0, 0))
{ {
return size / scaleFactor; if (!QHighDpiScaling::isActive())
return region;
QRegion scaled;
for (const QRect &rect : region)
scaled += scale(rect, scaleFactor, origin);
return scaled;
} }
inline QSizeF toNative(const QSizeF &size, qreal scaleFactor) template <typename T, typename C>
T fromNativePixels(const T &value, const C *context)
{ {
return size * scaleFactor; return scale(value, qreal(1) / QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
} }
inline QRect fromNative(const QRect &rect, qreal scaleFactor, const QPoint &origin) template <typename T, typename C>
T toNativePixels(const T &value, const C *context)
{ {
return QRect(fromNative(rect.topLeft(), scaleFactor, origin), fromNative(rect.size(), scaleFactor)); return scale(value, QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
} }
inline QRect toNative(const QRect &rect, qreal scaleFactor, const QPoint &origin) template <typename T, typename C>
T fromNativeLocalPosition(const T &value, const C *context)
{ {
return QRect(toNative(rect.topLeft(), scaleFactor, origin), toNative(rect.size(), scaleFactor)); return scale(value, qreal(1) / QHighDpiScaling::factor(context));
}
template <typename T, typename C>
T toNativeLocalPosition(const T &value, const C *context)
{
return scale(value, QHighDpiScaling::factor(context));
}
template <typename T>
inline T fromNative(const T &value, qreal scaleFactor, QPoint origin = QPoint(0, 0))
{
return scale(value, qreal(1) / scaleFactor, origin);
}
template <typename T>
inline T toNative(const T &value, qreal scaleFactor, QPoint origin = QPoint(0, 0))
{
return scale(value, scaleFactor, origin);
} }
inline QRect fromNative(const QRect &rect, const QScreen *screen, const QPoint &screenOrigin) inline QRect fromNative(const QRect &rect, const QScreen *screen, const QPoint &screenOrigin)
{ {
return fromNative(rect, QHighDpiScaling::factor(screen), screenOrigin); return scale(rect, qreal(1) / QHighDpiScaling::factor(screen), screenOrigin);
} }
inline QRect fromNativeScreenGeometry(const QRect &nativeScreenGeometry, const QScreen *screen) inline QRect fromNativeScreenGeometry(const QRect &nativeScreenGeometry, const QScreen *screen)
{ {
return QRect(nativeScreenGeometry.topLeft(), return QRect(nativeScreenGeometry.topLeft(),
fromNative(nativeScreenGeometry.size(), QHighDpiScaling::factor(screen))); scale(nativeScreenGeometry.size(), qreal(1) / QHighDpiScaling::factor(screen)));
}
inline QPoint fromNativeLocalPosition(const QPoint &pos, const QWindow *window)
{
const qreal scaleFactor = QHighDpiScaling::factor(window);
return pos / scaleFactor;
}
inline QPoint toNativeLocalPosition(const QPoint &pos, const QWindow *window)
{
const qreal scaleFactor = QHighDpiScaling::factor(window);
return pos * scaleFactor;
}
inline QPointF fromNativeLocalPosition(const QPointF &pos, const QWindow *window)
{
const qreal scaleFactor = QHighDpiScaling::factor(window);
return pos / scaleFactor;
}
inline QPointF toNativeLocalPosition(const QPointF &pos, const QWindow *window)
{
const qreal scaleFactor = QHighDpiScaling::factor(window);
return pos * scaleFactor;
}
template <typename C>
inline QRect fromNativePixels(const QRect &pixelRect, const C *context)
{
const qreal scaleFactor = QHighDpiScaling::factor(context);
const QPoint origin = QHighDpiScaling::origin(context);
return QRect(fromNative(pixelRect.topLeft(), scaleFactor, origin),
fromNative(pixelRect.size(), scaleFactor));
}
template <typename C>
inline QRect toNativePixels(const QRect &pointRect, const C *context)
{
const qreal scaleFactor = QHighDpiScaling::factor(context);
const QPoint origin = QHighDpiScaling::origin(context);
return QRect(toNative(pointRect.topLeft(), scaleFactor, origin),
toNative(pointRect.size(), scaleFactor));
}
template <typename C>
inline QRectF toNativePixels(const QRectF &pointRect, const C *context)
{
const qreal scaleFactor = QHighDpiScaling::factor(context);
const QPoint origin = QHighDpiScaling::origin(context);
return QRectF(toNative(pointRect.topLeft(), scaleFactor, origin),
toNative(pointRect.size(), scaleFactor));
}
template <typename C>
inline QRectF fromNativePixels(const QRectF &pixelRect, const C *context)
{
const qreal scaleFactor = QHighDpiScaling::factor(context);
const QPoint origin = QHighDpiScaling::origin(context);
return QRectF(fromNative(pixelRect.topLeft(), scaleFactor, origin),
fromNative(pixelRect.size(), scaleFactor));
}
inline QSize fromNativePixels(const QSize &pixelSize, const QWindow *window)
{
return pixelSize / QHighDpiScaling::factor(window);
}
inline QSize toNativePixels(const QSize &pointSize, const QWindow *window)
{
return pointSize * QHighDpiScaling::factor(window);
}
inline QSizeF fromNativePixels(const QSizeF &pixelSize, const QWindow *window)
{
return pixelSize / QHighDpiScaling::factor(window);
}
inline QSizeF toNativePixels(const QSizeF &pointSize, const QWindow *window)
{
return pointSize * QHighDpiScaling::factor(window);
}
template <typename C>
inline QPoint fromNativePixels(const QPoint &pixelPoint, const C *context)
{
return fromNative(pixelPoint, QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
}
template <typename C>
inline QPoint toNativePixels(const QPoint &pointPoint, const C *context)
{
return toNative(pointPoint, QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
}
template <typename C>
inline QPointF fromNativePixels(const QPointF &pixelPoint, const C *context)
{
return fromNative(pixelPoint, QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
}
template <typename C>
inline QPointF toNativePixels(const QPointF &pointPoint, const C *context)
{
return toNative(pointPoint, QHighDpiScaling::factor(context), QHighDpiScaling::origin(context));
}
inline QMargins fromNativePixels(const QMargins &pixelMargins, const QWindow *window)
{
const qreal scaleFactor = QHighDpiScaling::factor(window);
return QMargins(pixelMargins.left() / scaleFactor, pixelMargins.top() / scaleFactor,
pixelMargins.right() / scaleFactor, pixelMargins.bottom() / scaleFactor);
}
inline QMargins toNativePixels(const QMargins &pointMargins, const QWindow *window)
{
const qreal scaleFactor = QHighDpiScaling::factor(window);
return QMargins(pointMargins.left() * scaleFactor, pointMargins.top() * scaleFactor,
pointMargins.right() * scaleFactor, pointMargins.bottom() * scaleFactor);
} }
inline QRegion fromNativeLocalRegion(const QRegion &pixelRegion, const QWindow *window) inline QRegion fromNativeLocalRegion(const QRegion &pixelRegion, const QWindow *window)
{ {
if (!QHighDpiScaling::isActive()) return scale(pixelRegion, qreal(1) / QHighDpiScaling::factor(window));
return pixelRegion;
qreal scaleFactor = QHighDpiScaling::factor(window);
QRegion pointRegion;
for (const QRect &rect : pixelRegion) {
pointRegion += QRect(fromNative(rect.topLeft(), scaleFactor),
fromNative(rect.size(), scaleFactor));
}
return pointRegion;
} }
// When mapping expose events to Qt rects: round top/left towards the origin and // When mapping expose events to Qt rects: round top/left towards the origin and
@ -333,67 +239,7 @@ inline QRegion fromNativeLocalExposedRegion(const QRegion &pixelRegion, const QW
inline QRegion toNativeLocalRegion(const QRegion &pointRegion, const QWindow *window) inline QRegion toNativeLocalRegion(const QRegion &pointRegion, const QWindow *window)
{ {
if (!QHighDpiScaling::isActive()) return scale(pointRegion, QHighDpiScaling::factor(window));
return pointRegion;
qreal scaleFactor = QHighDpiScaling::factor(window);
QRegion pixelRegon;
for (const QRect &rect : pointRegion) {
pixelRegon += QRect(toNative(rect.topLeft(), scaleFactor),
toNative(rect.size(), scaleFactor));
}
return pixelRegon;
}
// Any T that has operator/()
template <typename T, typename C>
T fromNativePixels(const T &pixelValue, const C *context)
{
if (!QHighDpiScaling::isActive())
return pixelValue;
return pixelValue / QHighDpiScaling::factor(context);
}
// Any T that has operator*()
template <typename T, typename C>
T toNativePixels(const T &pointValue, const C *context)
{
if (!QHighDpiScaling::isActive())
return pointValue;
return pointValue * QHighDpiScaling::factor(context);
}
// Any QVector<T> where T has operator/()
template <typename T>
QVector<T> fromNativePixels(const QVector<T> &pixelValues, const QWindow *window)
{
if (!QHighDpiScaling::isActive())
return pixelValues;
QVector<T> pointValues;
pointValues.reserve(pixelValues.size());
const auto factor = QHighDpiScaling::factor(window);
for (const T &pixelValue : pixelValues)
pointValues.append(pixelValue / factor);
return pointValues;
}
// Any QVector<T> where T has operator*()
template <typename T>
QVector<T> toNativePixels(const QVector<T> &pointValues, const QWindow *window)
{
if (!QHighDpiScaling::isActive())
return pointValues;
QVector<T> pixelValues;
pixelValues.reserve(pointValues.size());
const auto factor = QHighDpiScaling::factor(window);
for (const T &pointValue : pointValues)
pixelValues.append(pointValue * factor);
return pixelValues;
} }
} // namespace QHighDpi } // namespace QHighDpi

View File

@ -514,7 +514,7 @@ float QVector3D::distanceToPlane
/*! /*!
\overload \overload
Returns the distance from this vertex a plane defined by Returns the distance from this vertex to a plane defined by
the vertices \a plane1, \a plane2 and \a plane3. the vertices \a plane1, \a plane2 and \a plane3.
The return value will be negative if the vertex is below the plane, The return value will be negative if the vertex is below the plane,

View File

@ -4510,7 +4510,9 @@ static void blend_color_rgb16(int count, const QSpan *spans, void *userData)
if (mode == QPainter::CompositionMode_Source) { if (mode == QPainter::CompositionMode_Source) {
// inline for performance // inline for performance
ushort c = data->solidColor.toRgb16(); ushort c = data->solidColor.toRgb16();
while (count--) { for (; count--; spans++) {
if (!spans->len)
continue;
ushort *target = ((ushort *)data->rasterBuffer->scanLine(spans->y)) + spans->x; ushort *target = ((ushort *)data->rasterBuffer->scanLine(spans->y)) + spans->x;
if (spans->coverage == 255) { if (spans->coverage == 255) {
qt_memfill(target, c, spans->len); qt_memfill(target, c, spans->len);
@ -4523,13 +4525,14 @@ static void blend_color_rgb16(int count, const QSpan *spans, void *userData)
++target; ++target;
} }
} }
++spans;
} }
return; return;
} }
if (mode == QPainter::CompositionMode_SourceOver) { if (mode == QPainter::CompositionMode_SourceOver) {
while (count--) { for (; count--; spans++) {
if (!spans->len)
continue;
uint color = BYTE_MUL(data->solidColor.toArgb32(), spans->coverage); uint color = BYTE_MUL(data->solidColor.toArgb32(), spans->coverage);
int ialpha = qAlpha(~color); int ialpha = qAlpha(~color);
ushort c = qConvertRgb32To16(color); ushort c = qConvertRgb32To16(color);
@ -4561,7 +4564,6 @@ static void blend_color_rgb16(int count, const QSpan *spans, void *userData)
// one last pixel beyond a full word // one last pixel beyond a full word
*target = c + BYTE_MUL_RGB16(*target, ialpha); *target = c + BYTE_MUL_RGB16(*target, ialpha);
} }
++spans;
} }
return; return;
} }
@ -4578,6 +4580,11 @@ void handleSpans(int count, const QSpan *spans, const QSpanData *data, T &handle
int coverage = 0; int coverage = 0;
while (count) { while (count) {
if (!spans->len) {
++spans;
--count;
continue;
}
int x = spans->x; int x = spans->x;
const int y = spans->y; const int y = spans->y;
int right = x + spans->len; int right = x + spans->len;
@ -4730,7 +4737,9 @@ static void blend_untransformed_generic(int count, const QSpan *spans, void *use
int xoff = -qRound(-data->dx); int xoff = -qRound(-data->dx);
int yoff = -qRound(-data->dy); int yoff = -qRound(-data->dy);
while (count--) { for (; count--; spans++) {
if (!spans->len)
continue;
int x = spans->x; int x = spans->x;
int length = spans->len; int length = spans->len;
int sx = xoff + x; int sx = xoff + x;
@ -4758,7 +4767,6 @@ static void blend_untransformed_generic(int count, const QSpan *spans, void *use
} }
} }
} }
++spans;
} }
} }
@ -4779,7 +4787,9 @@ static void blend_untransformed_generic_rgb64(int count, const QSpan *spans, voi
int xoff = -qRound(-data->dx); int xoff = -qRound(-data->dx);
int yoff = -qRound(-data->dy); int yoff = -qRound(-data->dy);
while (count--) { for (; count--; spans++) {
if (!spans->len)
continue;
int x = spans->x; int x = spans->x;
int length = spans->len; int length = spans->len;
int sx = xoff + x; int sx = xoff + x;
@ -4807,7 +4817,6 @@ static void blend_untransformed_generic_rgb64(int count, const QSpan *spans, voi
} }
} }
} }
++spans;
} }
} }
@ -4827,7 +4836,9 @@ static void blend_untransformed_argb(int count, const QSpan *spans, void *userDa
int xoff = -qRound(-data->dx); int xoff = -qRound(-data->dx);
int yoff = -qRound(-data->dy); int yoff = -qRound(-data->dy);
while (count--) { for (; count--; spans++) {
if (!spans->len)
continue;
int x = spans->x; int x = spans->x;
int length = spans->len; int length = spans->len;
int sx = xoff + x; int sx = xoff + x;
@ -4847,7 +4858,6 @@ static void blend_untransformed_argb(int count, const QSpan *spans, void *userDa
op.func(dest, src, length, coverage); op.func(dest, src, length, coverage);
} }
} }
++spans;
} }
} }
@ -4920,7 +4930,12 @@ static void blend_untransformed_rgb565(int count, const QSpan *spans, void *user
int xoff = -qRound(-data->dx); int xoff = -qRound(-data->dx);
int yoff = -qRound(-data->dy); int yoff = -qRound(-data->dy);
while (count--) { const QSpan *end = spans + count;
while (spans < end) {
if (!spans->len) {
++spans;
continue;
}
const quint8 coverage = (data->texture.const_alpha * spans->coverage) >> 8; const quint8 coverage = (data->texture.const_alpha * spans->coverage) >> 8;
if (coverage == 0) { if (coverage == 0) {
++spans; ++spans;

View File

@ -4183,7 +4183,7 @@ static void qt_span_fill_clipped(int spanCount, const QSpan *spans, void *userDa
Clip spans to \a{clip}-rectangle. Clip spans to \a{clip}-rectangle.
Returns number of unclipped spans Returns number of unclipped spans
*/ */
static int qt_intersect_spans(QT_FT_Span *spans, int numSpans, static int qt_intersect_spans(QT_FT_Span *&spans, int numSpans,
const QRect &clip) const QRect &clip)
{ {
const short minx = clip.left(); const short minx = clip.left();
@ -4191,29 +4191,32 @@ static int qt_intersect_spans(QT_FT_Span *spans, int numSpans,
const short maxx = clip.right(); const short maxx = clip.right();
const short maxy = clip.bottom(); const short maxy = clip.bottom();
int n = 0; QT_FT_Span *end = spans + numSpans;
for (int i = 0; i < numSpans; ++i) { while (spans < end) {
if (spans[i].y > maxy) if (spans->y >= miny)
break; break;
if (spans[i].y < miny ++spans;
|| spans[i].x > maxx }
|| spans[i].x + spans[i].len <= minx) {
QT_FT_Span *s = spans;
while (s < end) {
if (s->y > maxy)
break;
if (s->x > maxx || s->x + s->len <= minx) {
s->len = 0;
++s;
continue; continue;
} }
if (spans[i].x < minx) { if (s->x < minx) {
spans[n].len = qMin(spans[i].len - (minx - spans[i].x), maxx - minx + 1); s->len = qMin(s->len - (minx - s->x), maxx - minx + 1);
spans[n].x = minx; s->x = minx;
} else { } else {
spans[n].x = spans[i].x; s->len = qMin(s->len, ushort(maxx - s->x + 1));
spans[n].len = qMin(spans[i].len, ushort(maxx - spans[n].x + 1));
} }
if (spans[n].len == 0) ++s;
continue;
spans[n].y = spans[i].y;
spans[n].coverage = spans[i].coverage;
++n;
} }
return n;
return s - spans;
} }
@ -4226,11 +4229,12 @@ static void qt_span_fill_clipRect(int count, const QSpan *spans,
Q_ASSERT(fillData->clip); Q_ASSERT(fillData->clip);
Q_ASSERT(!fillData->clip->clipRect.isEmpty()); Q_ASSERT(!fillData->clip->clipRect.isEmpty());
QSpan *s = const_cast<QSpan *>(spans);
// hw: check if this const_cast<> is safe!!! // hw: check if this const_cast<> is safe!!!
count = qt_intersect_spans(const_cast<QSpan*>(spans), count, count = qt_intersect_spans(s, count,
fillData->clip->clipRect); fillData->clip->clipRect);
if (count > 0) if (count > 0)
fillData->unclipped_blend(count, spans, fillData); fillData->unclipped_blend(count, s, fillData);
} }
static void qt_span_clip(int count, const QSpan *spans, void *userData) static void qt_span_clip(int count, const QSpan *spans, void *userData)
@ -4843,7 +4847,8 @@ static inline void drawEllipsePoints(int x, int y, int length,
if (length == 0) if (length == 0)
return; return;
QT_FT_Span outline[4]; QT_FT_Span _outline[4];
QT_FT_Span *outline = _outline;
const int midx = rect.x() + (rect.width() + 1) / 2; const int midx = rect.x() + (rect.width() + 1) / 2;
const int midy = rect.y() + (rect.height() + 1) / 2; const int midy = rect.y() + (rect.height() + 1) / 2;
@ -4875,7 +4880,8 @@ static inline void drawEllipsePoints(int x, int y, int length,
outline[3].coverage = 255; outline[3].coverage = 255;
if (brush_func && outline[0].x + outline[0].len < outline[1].x) { if (brush_func && outline[0].x + outline[0].len < outline[1].x) {
QT_FT_Span fill[2]; QT_FT_Span _fill[2];
QT_FT_Span *fill = _fill;
// top fill // top fill
fill[0].x = outline[0].x + outline[0].len - 1; fill[0].x = outline[0].x + outline[0].len - 1;

View File

@ -525,7 +525,7 @@ void QStroker::joinPoints(qfixed focal_x, qfixed focal_y, const QLineF &nextLine
QLineF shortCut(prevLine.p2(), nextLine.p1()); QLineF shortCut(prevLine.p2(), nextLine.p1());
qreal angle = shortCut.angleTo(prevLine); qreal angle = shortCut.angleTo(prevLine);
if (type == QLineF::BoundedIntersection || (angle > 90 && !qFuzzyCompare(angle, (qreal)90))) { if ((type == QLineF::BoundedIntersection || (angle > qreal(90.01))) && nextLine.length() > offset) {
emitLineTo(focal_x, focal_y); emitLineTo(focal_x, focal_y);
emitLineTo(qt_real_to_fixed(nextLine.x1()), qt_real_to_fixed(nextLine.y1())); emitLineTo(qt_real_to_fixed(nextLine.x1()), qt_real_to_fixed(nextLine.y1()));
return; return;

View File

@ -233,7 +233,7 @@ QNetworkConfigurationManager::QNetworkConfigurationManager(QObject *parent)
: QObject(parent) : QObject(parent)
{ {
QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate();
if (priv) {
connect(priv, SIGNAL(configurationAdded(QNetworkConfiguration)), connect(priv, SIGNAL(configurationAdded(QNetworkConfiguration)),
this, SIGNAL(configurationAdded(QNetworkConfiguration))); this, SIGNAL(configurationAdded(QNetworkConfiguration)));
connect(priv, SIGNAL(configurationRemoved(QNetworkConfiguration)), connect(priv, SIGNAL(configurationRemoved(QNetworkConfiguration)),
@ -246,6 +246,7 @@ QNetworkConfigurationManager::QNetworkConfigurationManager(QObject *parent)
this, SIGNAL(updateCompleted())); this, SIGNAL(updateCompleted()));
priv->enablePolling(); priv->enablePolling();
}
} }
/*! /*!

View File

@ -258,7 +258,8 @@ QNetworkSession::QNetworkSession(const QNetworkConfiguration &connectionConfig,
// invalid configuration // invalid configuration
if (!connectionConfig.identifier().isEmpty()) { if (!connectionConfig.identifier().isEmpty()) {
const auto engines = qNetworkConfigurationManagerPrivate()->engines(); auto priv = qNetworkConfigurationManagerPrivate();
const auto engines = priv ? priv->engines() : QList<QBearerEngine *>();
for (QBearerEngine *engine : engines) { for (QBearerEngine *engine : engines) {
if (engine->hasIdentifier(connectionConfig.identifier())) { if (engine->hasIdentifier(connectionConfig.identifier())) {
d = engine->createSessionBackend(); d = engine->createSessionBackend();

View File

@ -265,6 +265,8 @@ static RoleMapping map[] = {
//: Role of an accessible object //: Role of an accessible object
{ QAccessible::Desktop, ATSPI_ROLE_DESKTOP_FRAME, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "desktop") }, { QAccessible::Desktop, ATSPI_ROLE_DESKTOP_FRAME, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "desktop") },
//: Role of an accessible object //: Role of an accessible object
{ QAccessible::Notification, ATSPI_ROLE_NOTIFICATION, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "notification") },
//: Role of an accessible object
{ QAccessible::UserRole, ATSPI_ROLE_UNKNOWN, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "unknown") } { QAccessible::UserRole, ATSPI_ROLE_UNKNOWN, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "unknown") }
}; };

View File

@ -56,13 +56,14 @@ QT_BEGIN_NAMESPACE
static QBearerEngineImpl *getEngineFromId(const QString &id) static QBearerEngineImpl *getEngineFromId(const QString &id)
{ {
QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate(); QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate();
if (priv) {
const auto engines = priv->engines(); const auto engines = priv->engines();
for (QBearerEngine *engine : engines) { for (QBearerEngine *engine : engines) {
QBearerEngineImpl *engineImpl = qobject_cast<QBearerEngineImpl *>(engine); QBearerEngineImpl *engineImpl = qobject_cast<QBearerEngineImpl *>(engine);
if (engineImpl && engineImpl->hasIdentifier(id)) if (engineImpl && engineImpl->hasIdentifier(id))
return engineImpl; return engineImpl;
} }
}
return 0; return 0;
} }

File diff suppressed because it is too large Load Diff

View File

@ -151,6 +151,9 @@ private slots:
private: private:
void sendInputMethodEvent(QInputMethodEvent *event); void sendInputMethodEvent(QInputMethodEvent *event);
QSharedPointer<QInputMethodQueryEvent> focusObjectInputMethodQuery(Qt::InputMethodQueries queries = Qt::ImQueryAll); QSharedPointer<QInputMethodQueryEvent> focusObjectInputMethodQuery(Qt::InputMethodQueries queries = Qt::ImQueryAll);
bool focusObjectIsComposing() const;
void focusObjectStartComposing();
bool focusObjectStopComposing();
private: private:
ExtractedText m_extractedText; ExtractedText m_extractedText;
@ -158,9 +161,8 @@ private:
int m_composingTextStart; int m_composingTextStart;
int m_composingCursor; int m_composingCursor;
QMetaObject::Connection m_updateCursorPosConnection; QMetaObject::Connection m_updateCursorPosConnection;
bool m_blockUpdateSelection;
HandleModes m_handleMode; HandleModes m_handleMode;
QAtomicInt m_batchEditNestingLevel; int m_batchEditNestingLevel;
QObject *m_focusObject; QObject *m_focusObject;
QTimer m_hideCursorHandleTimer; QTimer m_hideCursorHandleTimer;
}; };

View File

@ -55,6 +55,7 @@ public:
QNSWindowBackingStore(QWindow *window); QNSWindowBackingStore(QWindow *window);
~QNSWindowBackingStore(); ~QNSWindowBackingStore();
void resize(const QSize &size, const QRegion &staticContents) override;
void flush(QWindow *, const QRegion &, const QPoint &) override; void flush(QWindow *, const QRegion &, const QPoint &) override;
private: private:

View File

@ -71,6 +71,24 @@ QImage::Format QNSWindowBackingStore::format() const
return QRasterBackingStore::format(); return QRasterBackingStore::format();
} }
void QNSWindowBackingStore::resize(const QSize &size, const QRegion &staticContents)
{
qCDebug(lcQpaBackingStore) << "Resize requested to" << size;
QRasterBackingStore::resize(size, staticContents);
// The window shadow rendered by AppKit is based on the shape/content of the
// NSWindow surface. Technically any flush of the backingstore can result in
// a potentially new shape of the window, and would need a shadow invalidation,
// but this is likely too expensive to do at every flush for the few cases where
// clients change the shape dynamically. One case where we do know that the shadow
// likely needs invalidation, if the window has partially transparent content,
// is after a resize, where AppKit's default shadow may be based on the previous
// window content.
QCocoaWindow *cocoaWindow = static_cast<QCocoaWindow *>(window()->handle());
if (cocoaWindow->isContentView() && !cocoaWindow->isOpaque())
cocoaWindow->m_needsInvalidateShadow = true;
}
/*! /*!
Flushes the given \a region from the specified \a window onto the Flushes the given \a region from the specified \a window onto the
screen. screen.
@ -217,6 +235,7 @@ void QNSWindowBackingStore::flush(QWindow *window, const QRegion &region, const
QCocoaWindow *topLevelCocoaWindow = static_cast<QCocoaWindow *>(topLevelWindow->handle()); QCocoaWindow *topLevelCocoaWindow = static_cast<QCocoaWindow *>(topLevelWindow->handle());
if (Q_UNLIKELY(topLevelCocoaWindow->m_needsInvalidateShadow)) { if (Q_UNLIKELY(topLevelCocoaWindow->m_needsInvalidateShadow)) {
qCDebug(lcQpaBackingStore) << "Invalidating window shadow for" << topLevelCocoaWindow;
[topLevelView.window invalidateShadow]; [topLevelView.window invalidateShadow];
topLevelCocoaWindow->m_needsInvalidateShadow = false; topLevelCocoaWindow->m_needsInvalidateShadow = false;
} }
@ -382,10 +401,11 @@ void QCALayerBackingStore::ensureBackBuffer()
bool QCALayerBackingStore::recreateBackBufferIfNeeded() bool QCALayerBackingStore::recreateBackBufferIfNeeded()
{ {
const qreal devicePixelRatio = window()->devicePixelRatio(); const QCocoaWindow *platformWindow = static_cast<QCocoaWindow *>(window()->handle());
const qreal devicePixelRatio = platformWindow->devicePixelRatio();
QSize requestedBufferSize = m_requestedSize * devicePixelRatio; QSize requestedBufferSize = m_requestedSize * devicePixelRatio;
const NSView *backingStoreView = static_cast<QCocoaWindow *>(window()->handle())->view(); const NSView *backingStoreView = platformWindow->view();
Q_UNUSED(backingStoreView); Q_UNUSED(backingStoreView);
auto bufferSizeMismatch = [&](const QSize requested, const QSize actual) { auto bufferSizeMismatch = [&](const QSize requested, const QSize actual) {

View File

@ -191,6 +191,7 @@ public:
static void waitingObserverCallback(CFRunLoopObserverRef observer, static void waitingObserverCallback(CFRunLoopObserverRef observer,
CFRunLoopActivity activity, void *info); CFRunLoopActivity activity, void *info);
static void firstLoopEntry(CFRunLoopObserverRef ref, CFRunLoopActivity activity, void *info); static void firstLoopEntry(CFRunLoopObserverRef ref, CFRunLoopActivity activity, void *info);
bool sendQueuedUserInputEvents();
void processPostedEvents(); void processPostedEvents();
}; };

View File

@ -377,16 +377,9 @@ bool QCocoaEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags)
NSEvent* event = nil; NSEvent* event = nil;
// First, send all previously excluded input events, if any: // First, send all previously excluded input events, if any:
if (!excludeUserEvents) { if (d->sendQueuedUserInputEvents())
while (!d->queuedUserInputEvents.isEmpty()) {
event = static_cast<NSEvent *>(d->queuedUserInputEvents.takeFirst());
if (!filterNativeEvent("NSEvent", event, nullptr)) {
[NSApp sendEvent:event];
retVal = true; retVal = true;
}
[event release];
}
}
// If Qt is used as a plugin, or as an extension in a native cocoa // If Qt is used as a plugin, or as an extension in a native cocoa
// application, we should not run or stop NSApplication; This will be // application, we should not run or stop NSApplication; This will be
@ -843,6 +836,23 @@ void QCocoaEventDispatcherPrivate::waitingObserverCallback(CFRunLoopObserverRef,
emit static_cast<QCocoaEventDispatcher*>(info)->awake(); emit static_cast<QCocoaEventDispatcher*>(info)->awake();
} }
bool QCocoaEventDispatcherPrivate::sendQueuedUserInputEvents()
{
Q_Q(QCocoaEventDispatcher);
if (processEventsFlags & QEventLoop::ExcludeUserInputEvents)
return false;
bool didSendEvent = false;
while (!queuedUserInputEvents.isEmpty()) {
NSEvent *event = static_cast<NSEvent *>(queuedUserInputEvents.takeFirst());
if (!q->filterNativeEvent("NSEvent", event, nullptr)) {
[NSApp sendEvent:event];
didSendEvent = true;
}
[event release];
}
return didSendEvent;
}
void QCocoaEventDispatcherPrivate::processPostedEvents() void QCocoaEventDispatcherPrivate::processPostedEvents()
{ {
if (blockSendPostedEvents) { if (blockSendPostedEvents) {
@ -896,6 +906,7 @@ void QCocoaEventDispatcherPrivate::postedEventsSourceCallback(void *info)
d->maybeCancelWaitForMoreEvents(); d->maybeCancelWaitForMoreEvents();
return; return;
} }
d->sendQueuedUserInputEvents();
d->processPostedEvents(); d->processPostedEvents();
d->maybeCancelWaitForMoreEvents(); d->maybeCancelWaitForMoreEvents();
} }

View File

@ -1011,8 +1011,7 @@ void QCocoaWindow::setMask(const QRegion &region)
} else { } else {
m_view.layer.mask = nil; m_view.layer.mask = nil;
} }
} } else {
if (isContentView()) { if (isContentView()) {
// Setting the mask requires invalidating the NSWindow shadow, but that needs // Setting the mask requires invalidating the NSWindow shadow, but that needs
// to happen after the backingstore has been redrawn, so that AppKit can pick // to happen after the backingstore has been redrawn, so that AppKit can pick
@ -1022,6 +1021,7 @@ void QCocoaWindow::setMask(const QRegion &region)
m_needsInvalidateShadow = true; m_needsInvalidateShadow = true;
[m_view setNeedsDisplay:YES]; [m_view setNeedsDisplay:YES];
} }
}
} }
bool QCocoaWindow::setKeyboardGrabEnabled(bool grab) bool QCocoaWindow::setKeyboardGrabEnabled(bool grab)

View File

@ -101,6 +101,8 @@
- (id)accessibilityElementAtIndex:(NSInteger)index - (id)accessibilityElementAtIndex:(NSInteger)index
{ {
[self initAccessibility]; [self initAccessibility];
if (index >= [m_accessibleElements count])
return nil;
return m_accessibleElements[index]; return m_accessibleElements[index];
} }
@ -110,4 +112,10 @@
return [m_accessibleElements indexOfObject:element]; return [m_accessibleElements indexOfObject:element];
} }
- (NSArray *)accessibilityElements
{
[self initAccessibility];
return m_accessibleElements;
}
@end @end

View File

@ -77,6 +77,7 @@
#include <QtCore/qoperatingsystemversion.h> #include <QtCore/qoperatingsystemversion.h>
#include <QtCore/qsysinfo.h> #include <QtCore/qsysinfo.h>
#include <QtCore/qscopedpointer.h> #include <QtCore/qscopedpointer.h>
#include <QtCore/quuid.h>
#include <QtCore/private/qsystemlibrary_p.h> #include <QtCore/private/qsystemlibrary_p.h>
#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h> #include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h>
@ -544,7 +545,7 @@ QString QWindowsContext::registerWindowClass(QString cname,
// each one has to have window class names with a unique name // each one has to have window class names with a unique name
// The first instance gets the unmodified name; if the class // The first instance gets the unmodified name; if the class
// has already been registered by another instance of Qt then // has already been registered by another instance of Qt then
// add an instance-specific ID, the address of the window proc. // add a UUID.
static int classExists = -1; static int classExists = -1;
const HINSTANCE appInstance = static_cast<HINSTANCE>(GetModuleHandle(nullptr)); const HINSTANCE appInstance = static_cast<HINSTANCE>(GetModuleHandle(nullptr));
@ -555,7 +556,7 @@ QString QWindowsContext::registerWindowClass(QString cname,
} }
if (classExists) if (classExists)
cname += QString::number(reinterpret_cast<quintptr>(proc)); cname += QUuid::createUuid().toString();
if (d->m_registeredWindowClassNames.contains(cname)) // already registered in our list if (d->m_registeredWindowClassNames.contains(cname)) // already registered in our list
return cname; return cname;

View File

@ -204,7 +204,6 @@ QGLXContext::QGLXContext(QXcbScreen *screen, const QSurfaceFormat &format, QPlat
, m_shareContext(0) , m_shareContext(0)
, m_format(format) , m_format(format)
, m_isPBufferCurrent(false) , m_isPBufferCurrent(false)
, m_swapInterval(-1)
, m_ownsContext(nativeHandle.isNull()) , m_ownsContext(nativeHandle.isNull())
, m_getGraphicsResetStatus(0) , m_getGraphicsResetStatus(0)
, m_lost(false) , m_lost(false)
@ -567,9 +566,9 @@ bool QGLXContext::makeCurrent(QPlatformSurface *surface)
if (success && surfaceClass == QSurface::Window) { if (success && surfaceClass == QSurface::Window) {
int interval = surface->format().swapInterval(); int interval = surface->format().swapInterval();
QXcbWindow *window = static_cast<QXcbWindow *>(surface);
QXcbScreen *screen = screenForPlatformSurface(surface); QXcbScreen *screen = screenForPlatformSurface(surface);
if (interval >= 0 && m_swapInterval != interval && screen) { if (interval >= 0 && interval != window->swapInterval() && screen) {
m_swapInterval = interval;
typedef void (*qt_glXSwapIntervalEXT)(Display *, GLXDrawable, int); typedef void (*qt_glXSwapIntervalEXT)(Display *, GLXDrawable, int);
typedef void (*qt_glXSwapIntervalMESA)(unsigned int); typedef void (*qt_glXSwapIntervalMESA)(unsigned int);
static qt_glXSwapIntervalEXT glXSwapIntervalEXT = 0; static qt_glXSwapIntervalEXT glXSwapIntervalEXT = 0;
@ -588,6 +587,7 @@ bool QGLXContext::makeCurrent(QPlatformSurface *surface)
glXSwapIntervalEXT(m_display, glxDrawable, interval); glXSwapIntervalEXT(m_display, glxDrawable, interval);
else if (glXSwapIntervalMESA) else if (glXSwapIntervalMESA)
glXSwapIntervalMESA(interval); glXSwapIntervalMESA(interval);
window->setSwapInterval(interval);
} }
} }

View File

@ -87,7 +87,6 @@ private:
GLXContext m_shareContext; GLXContext m_shareContext;
QSurfaceFormat m_format; QSurfaceFormat m_format;
bool m_isPBufferCurrent; bool m_isPBufferCurrent;
int m_swapInterval;
bool m_ownsContext; bool m_ownsContext;
GLenum (APIENTRY * m_getGraphicsResetStatus)(); GLenum (APIENTRY * m_getGraphicsResetStatus)();
bool m_lost; bool m_lost;

View File

@ -184,6 +184,9 @@ public:
static void setWindowTitle(const QXcbConnection *conn, xcb_window_t window, const QString &title); static void setWindowTitle(const QXcbConnection *conn, xcb_window_t window, const QString &title);
static QString windowTitle(const QXcbConnection *conn, xcb_window_t window); static QString windowTitle(const QXcbConnection *conn, xcb_window_t window);
int swapInterval() const { return m_swapInterval; }
void setSwapInterval(int swapInterval) { m_swapInterval = swapInterval; }
public Q_SLOTS: public Q_SLOTS:
void updateSyncRequestCounter(); void updateSyncRequestCounter();
@ -276,6 +279,7 @@ protected:
SyncState m_syncState = NoSyncNeeded; SyncState m_syncState = NoSyncNeeded;
QXcbSyncWindowRequest *m_pendingSyncRequest = nullptr; QXcbSyncWindowRequest *m_pendingSyncRequest = nullptr;
int m_swapInterval = -1;
}; };
class QXcbForeignWindow : public QXcbWindow class QXcbForeignWindow : public QXcbWindow

View File

@ -2555,11 +2555,12 @@ int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QW
QPalette QMacStyle::standardPalette() const QPalette QMacStyle::standardPalette() const
{ {
QPalette pal = QCommonStyle::standardPalette(); auto platformTheme = QGuiApplicationPrivate::platformTheme();
pal.setColor(QPalette::Disabled, QPalette::Dark, QColor(191, 191, 191)); auto styleNames = platformTheme->themeHint(QPlatformTheme::StyleNames);
pal.setColor(QPalette::Active, QPalette::Dark, QColor(191, 191, 191)); if (styleNames.toStringList().contains("macintosh"))
pal.setColor(QPalette::Inactive, QPalette::Dark, QColor(191, 191, 191)); return *platformTheme->palette();
return pal; else
return QStyle::standardPalette();
} }
int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w, int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w,

View File

@ -3706,17 +3706,6 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
bool dis = !(opt->state & QStyle::State_Enabled), bool dis = !(opt->state & QStyle::State_Enabled),
act = opt->state & QStyle::State_Selected; act = opt->state & QStyle::State_Selected;
int checkableOffset = 0;
if (checkable) {
QRenderRule subSubRule = renderRule(w, opt, PseudoElement_MenuCheckMark);
QStyleOptionMenuItem newMi = mi;
newMi.rect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction);
// align with icons if there are some
checkableOffset = std::max(m->maxIconWidth, newMi.rect.width());
if (subSubRule.hasDrawable() || checked)
drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, w);
}
if (!mi.icon.isNull()) { if (!mi.icon.isNull()) {
QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal; QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal;
if (act && !dis) if (act && !dis)
@ -3733,24 +3722,28 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
} }
QRect iconRect = positionRect(w, subRule, iconRule, PseudoElement_MenuIcon, opt->rect, opt->direction); QRect iconRect = positionRect(w, subRule, iconRule, PseudoElement_MenuIcon, opt->rect, opt->direction);
if (opt->direction == Qt::LeftToRight) if (opt->direction == Qt::LeftToRight)
iconRect.moveLeft(iconRect.left() + checkableOffset); iconRect.moveLeft(iconRect.left());
else else
iconRect.moveRight(iconRect.right() - checkableOffset); iconRect.moveRight(iconRect.right());
iconRule.drawRule(p, iconRect); iconRule.drawRule(p, iconRect);
QRect pmr(0, 0, pixw, pixh); QRect pmr(0, 0, pixw, pixh);
pmr.moveCenter(iconRect.center()); pmr.moveCenter(iconRect.center());
p->drawPixmap(pmr.topLeft(), pixmap); p->drawPixmap(pmr.topLeft(), pixmap);
} else if (checkable) {
QRenderRule subSubRule = renderRule(w, opt, PseudoElement_MenuCheckMark);
if (subSubRule.hasDrawable() || checked) {
QStyleOptionMenuItem newMi = mi;
if (!dis)
newMi.state |= State_Enabled;
if (act)
newMi.state |= State_On;
newMi.rect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction);
drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, w);
}
} }
int textOffset = 0;
// padding overrules it all
if (!subRule.hasBox() || subRule.box()->paddings[LeftEdge] == 0) {
textOffset = checkableOffset;
if (!m->icon.isNull() || !checkable)
textOffset += m->maxIconWidth;
}
QRect textRect = subRule.contentsRect(opt->rect); QRect textRect = subRule.contentsRect(opt->rect);
textRect.setLeft(textRect.left() + textOffset); textRect.setLeft(textRect.left() + m->maxIconWidth);
textRect.setWidth(textRect.width() - mi.tabWidth); textRect.setWidth(textRect.width() - mi.tabWidth);
const QRect vTextRect = visualRect(opt->direction, m->rect, textRect); const QRect vTextRect = visualRect(opt->direction, m->rect, textRect);
@ -5101,27 +5094,20 @@ QSize QStyleSheetStyle::sizeFromContents(ContentsType ct, const QStyleOption *op
if (mi->text.contains(QLatin1Char('\t'))) if (mi->text.contains(QLatin1Char('\t')))
sz.rwidth() += 12; //as in QCommonStyle sz.rwidth() += 12; //as in QCommonStyle
bool checkable = mi->checkType != QStyleOptionMenuItem::NotCheckable; bool checkable = mi->checkType != QStyleOptionMenuItem::NotCheckable;
int checkableWidth = 0; if (!mi->icon.isNull()) {
if (checkable) { const int pmSmall = pixelMetric(PM_SmallIconSize);
const QSize pmSize = mi->icon.actualSize(QSize(pmSmall, pmSmall));
sz.rwidth() += pmSize.width() + 4;
} else if (checkable) {
QRenderRule subSubRule = renderRule(w, opt, PseudoElement_MenuCheckMark); QRenderRule subSubRule = renderRule(w, opt, PseudoElement_MenuCheckMark);
QRect checkmarkRect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction); QRect checkmarkRect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction);
checkableWidth = std::max(mi->maxIconWidth, checkmarkRect.width()); sz.rwidth() += std::max(mi->maxIconWidth, checkmarkRect.width()) + 4;
}
if (!mi->icon.isNull()) {
QPixmap pixmap = mi->icon.pixmap(pixelMetric(PM_SmallIconSize));
sz.rwidth() += pixmap.width();
} }
if (subRule.hasFont) { if (subRule.hasFont) {
QFontMetrics fm(subRule.font); QFontMetrics fm(subRule.font);
const QRect r = fm.boundingRect(QRect(), Qt::TextSingleLine | Qt::TextShowMnemonic, mi->text); const QRect r = fm.boundingRect(QRect(), Qt::TextSingleLine | Qt::TextShowMnemonic, mi->text);
sz = sz.expandedTo(r.size()); sz = sz.expandedTo(r.size());
} }
// padding overrules it all
if (!subRule.hasBox() || subRule.box()->paddings[LeftEdge] == 0) {
sz.rwidth() += checkableWidth;
if (!mi->icon.isNull() || !checkable)
sz.rwidth() += mi->maxIconWidth;
}
return subRule.boxSize(subRule.adjustSize(sz)); return subRule.boxSize(subRule.adjustSize(sz));
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -164,6 +164,9 @@ private slots:
void preserveTexts_data(); void preserveTexts_data();
void preserveTexts(); void preserveTexts();
void devicePixelRatio_data();
void devicePixelRatio();
private: private:
QString prefix; QString prefix;
QTemporaryDir m_temporaryDir; QTemporaryDir m_temporaryDir;
@ -1976,6 +1979,28 @@ void tst_QImageReader::preserveTexts()
QCOMPARE(r.text(key3), text3.simplified()); QCOMPARE(r.text(key3), text3.simplified());
} }
void tst_QImageReader::devicePixelRatio_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<QSize>("size");
QTest::addColumn<qreal>("dpr");
QTest::newRow("1x") << "qticon16.png" << QSize(16, 16) << 1.0;
QTest::newRow("2x") << "qticon16@2x.png" << QSize(32, 32) << 2.0;
QTest::newRow("3x") << "qticon16@3x.png" << QSize(48, 48) << 3.0;
}
void tst_QImageReader::devicePixelRatio()
{
QFETCH(QString, fileName);
QFETCH(QSize, size);
QFETCH(qreal, dpr);
QImageReader r(":/images/" + fileName);
QImage img = r.read();
QCOMPARE(img.size(), size);
QCOMPARE(img.devicePixelRatio(), dpr);
}
QTEST_MAIN(tst_QImageReader) QTEST_MAIN(tst_QImageReader)
#include "tst_qimagereader.moc" #include "tst_qimagereader.moc"

View File

@ -2342,7 +2342,7 @@ void tst_QFtp::loginURL()
ftp = newFtp(); ftp = newFtp();
addCommand(QFtp::ConnectToHost, addCommand(QFtp::ConnectToHost,
ftp->connectToHost(QHostInfo::localHostName(), port)); ftp->connectToHost("127.0.0.1", port));
addCommand(QFtp::Login, ftp->login(user, password)); addCommand(QFtp::Login, ftp->login(user, password));
QTestEventLoop::instance().enterLoop(5); QTestEventLoop::instance().enterLoop(5);
@ -2350,7 +2350,7 @@ void tst_QFtp::loginURL()
ftp = nullptr; ftp = nullptr;
server.stopServer(); server.stopServer();
if (QTestEventLoop::instance().timeout()) if (QTestEventLoop::instance().timeout())
QFAIL(msgTimedOut(QHostInfo::localHostName(), port)); QFAIL(msgTimedOut("127.0.0.1", port));
QCOMPARE(server.getRawUser(), rawUser); QCOMPARE(server.getRawUser(), rawUser);
QCOMPARE(server.getRawPassword(), rawPass); QCOMPARE(server.getRawPassword(), rawPass);

View File

@ -34,3 +34,14 @@ setPen blue 40 solidline roundcap
drawPath revbez drawPath revbez
setPen red 0 setPen red 0
drawPath revbez drawPath revbez
resetMatrix
path_lineTo tightJoin 60 10
path_cubicTo tightJoin 50 0 100 0 100 50
translate 50 500
setPen green 40 solidline roundcap roundjoin
drawPath tightJoin
setPen red 0
drawPath tightJoin