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
\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.
\image classwizard.png Screenshot of the Class Wizard example

View File

@ -28,7 +28,10 @@ CONFIG(release, debug|release) {
}
load(link_ltcg)
QMAKE_CFLAGS *= $$QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS *= $$QMAKE_CXXFLAGS_LTCG
QMAKE_LFLAGS *= $$QMAKE_LFLAGS_LTCG
QMAKE_CFLAGS -= $$QMAKE_CFLAGS_LTCG
QMAKE_CFLAGS += $$QMAKE_CFLAGS_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
}
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 {
# 4180: qualifier applied to function type has no meaning; ignored
# 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
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
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -55,8 +55,8 @@
instance, the computation can be canceled with the cancel() function. To
pause the computation, use the setPaused() function or one of the pause(),
resume(), or togglePaused() convenience functions. Be aware that not all
asynchronous computations can be canceled or paused. For example, the
future returned by QtConcurrent::run() cannot be canceled; but the
running asynchronous computations can be canceled or paused. For example,
the future returned by QtConcurrent::run() cannot be canceled; but the
future returned by QtConcurrent::mappedReduced() can.
Progress information is provided by the progressValue(),
@ -133,8 +133,8 @@
Any QFutureWatcher object that is watching this future will not deliver
progress and result ready signals on a canceled future.
Be aware that not all asynchronous computations can be canceled. For
example, the future returned by QtConcurrent::run() cannot be canceled;
Be aware that not all running asynchronous computations can be canceled.
For example, the future returned by QtConcurrent::run() cannot be canceled;
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
Be aware that not all asynchronous computations can be canceled or paused.
For example, the future returned by QtConcurrent::run() cannot be
Be aware that not all running asynchronous computations can be canceled or
paused. For example, the future returned by QtConcurrent::run() cannot be
canceled; but the future returned by QtConcurrent::mappedReduced() can.
QFutureWatcher<void> is specialized to not contain any of the result
@ -124,9 +124,9 @@ QFutureWatcherBase::QFutureWatcherBase(QObject *parent)
progressRangeChanged(), progressTextChanged(), resultReadyAt(), and
resultsReadyAt() signals.
Be aware that not all asynchronous computations can be canceled. For
example, the QFuture returned by QtConcurrent::run() cannot be canceled;
but the QFuture returned by QtConcurrent::mappedReduced() can.
Be aware that not all running asynchronous computations can be canceled.
For example, the QFuture returned by QtConcurrent::run() cannot be
canceled; but the QFuture returned by QtConcurrent::mappedReduced() can.
*/
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;
int code = pthread_create(&threadId, &attr, QThreadPrivate::start, this);
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 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 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 PageTabList A list of page tabs.
\value Paragraph A paragraph of text (usually found in documents).

View File

@ -299,6 +299,7 @@ public:
Paragraph = 0x00000083,
WebDocument = 0x00000084,
Section = 0x00000085,
Notification = 0x00000086,
// IAccessible2 roles
// 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.
static bool disable2xImageLoading = !qEnvironmentVariableIsEmpty("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING");
if (!disable2xImageLoading && QFileInfo(fileName()).baseName().endsWith(QLatin1String("@2x"))) {
image->setDevicePixelRatio(2.0);
// successful read; check for "@Nx" file name suffix and set device pixel ratio.
static bool disableNxImageLoading = !qEnvironmentVariableIsEmpty("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING");
if (!disableNxImageLoading) {
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())
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 windowPosCandidate = pos - windowGlobalPosition;
if (QGuiApplicationPrivate::screen_list.size() <= 1)
if (QGuiApplicationPrivate::screen_list.size() <= 1 || window->handle() == nullptr)
return windowPosCandidate;
// Device independent global (screen) space may discontiguous when high-dpi scaling

View File

@ -108,208 +108,114 @@ private:
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;
}
inline QPoint fromNative(const QPoint &pos, qreal scaleFactor, const QPoint &origin)
{
return (pos - origin) / scaleFactor + origin;
}
inline QPoint toNative(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 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)
{
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)
{
return QRect(nativeScreenGeometry.topLeft(),
fromNative(nativeScreenGeometry.size(), 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);
scale(nativeScreenGeometry.size(), qreal(1) / QHighDpiScaling::factor(screen)));
}
inline QRegion fromNativeLocalRegion(const QRegion &pixelRegion, const QWindow *window)
{
if (!QHighDpiScaling::isActive())
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;
return scale(pixelRegion, qreal(1) / QHighDpiScaling::factor(window));
}
// 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)
{
if (!QHighDpiScaling::isActive())
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;
return scale(pointRegion, QHighDpiScaling::factor(window));
}
} // namespace QHighDpi

View File

@ -514,7 +514,7 @@ float QVector3D::distanceToPlane
/*!
\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 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) {
// inline for performance
ushort c = data->solidColor.toRgb16();
while (count--) {
for (; count--; spans++) {
if (!spans->len)
continue;
ushort *target = ((ushort *)data->rasterBuffer->scanLine(spans->y)) + spans->x;
if (spans->coverage == 255) {
qt_memfill(target, c, spans->len);
@ -4523,13 +4525,14 @@ static void blend_color_rgb16(int count, const QSpan *spans, void *userData)
++target;
}
}
++spans;
}
return;
}
if (mode == QPainter::CompositionMode_SourceOver) {
while (count--) {
for (; count--; spans++) {
if (!spans->len)
continue;
uint color = BYTE_MUL(data->solidColor.toArgb32(), spans->coverage);
int ialpha = qAlpha(~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
*target = c + BYTE_MUL_RGB16(*target, ialpha);
}
++spans;
}
return;
}
@ -4578,6 +4580,11 @@ void handleSpans(int count, const QSpan *spans, const QSpanData *data, T &handle
int coverage = 0;
while (count) {
if (!spans->len) {
++spans;
--count;
continue;
}
int x = spans->x;
const int y = spans->y;
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 yoff = -qRound(-data->dy);
while (count--) {
for (; count--; spans++) {
if (!spans->len)
continue;
int x = spans->x;
int length = spans->len;
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 yoff = -qRound(-data->dy);
while (count--) {
for (; count--; spans++) {
if (!spans->len)
continue;
int x = spans->x;
int length = spans->len;
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 yoff = -qRound(-data->dy);
while (count--) {
for (; count--; spans++) {
if (!spans->len)
continue;
int x = spans->x;
int length = spans->len;
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);
}
}
++spans;
}
}
@ -4920,7 +4930,12 @@ static void blend_untransformed_rgb565(int count, const QSpan *spans, void *user
int xoff = -qRound(-data->dx);
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;
if (coverage == 0) {
++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.
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 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 maxy = clip.bottom();
int n = 0;
for (int i = 0; i < numSpans; ++i) {
if (spans[i].y > maxy)
QT_FT_Span *end = spans + numSpans;
while (spans < end) {
if (spans->y >= miny)
break;
if (spans[i].y < miny
|| spans[i].x > maxx
|| spans[i].x + spans[i].len <= minx) {
continue;
}
if (spans[i].x < minx) {
spans[n].len = qMin(spans[i].len - (minx - spans[i].x), maxx - minx + 1);
spans[n].x = minx;
} else {
spans[n].x = spans[i].x;
spans[n].len = qMin(spans[i].len, ushort(maxx - spans[n].x + 1));
}
if (spans[n].len == 0)
continue;
spans[n].y = spans[i].y;
spans[n].coverage = spans[i].coverage;
++n;
++spans;
}
return n;
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;
}
if (s->x < minx) {
s->len = qMin(s->len - (minx - s->x), maxx - minx + 1);
s->x = minx;
} else {
s->len = qMin(s->len, ushort(maxx - s->x + 1));
}
++s;
}
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->clipRect.isEmpty());
QSpan *s = const_cast<QSpan *>(spans);
// 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);
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)
@ -4843,7 +4847,8 @@ static inline void drawEllipsePoints(int x, int y, int length,
if (length == 0)
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 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;
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
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());
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(qt_real_to_fixed(nextLine.x1()), qt_real_to_fixed(nextLine.y1()));
return;

View File

@ -233,19 +233,20 @@ QNetworkConfigurationManager::QNetworkConfigurationManager(QObject *parent)
: QObject(parent)
{
QNetworkConfigurationManagerPrivate *priv = qNetworkConfigurationManagerPrivate();
if (priv) {
connect(priv, SIGNAL(configurationAdded(QNetworkConfiguration)),
this, SIGNAL(configurationAdded(QNetworkConfiguration)));
connect(priv, SIGNAL(configurationRemoved(QNetworkConfiguration)),
this, SIGNAL(configurationRemoved(QNetworkConfiguration)));
connect(priv, SIGNAL(configurationChanged(QNetworkConfiguration)),
this, SIGNAL(configurationChanged(QNetworkConfiguration)));
connect(priv, SIGNAL(onlineStateChanged(bool)),
this, SIGNAL(onlineStateChanged(bool)));
connect(priv, SIGNAL(configurationUpdateComplete()),
this, SIGNAL(updateCompleted()));
connect(priv, SIGNAL(configurationAdded(QNetworkConfiguration)),
this, SIGNAL(configurationAdded(QNetworkConfiguration)));
connect(priv, SIGNAL(configurationRemoved(QNetworkConfiguration)),
this, SIGNAL(configurationRemoved(QNetworkConfiguration)));
connect(priv, SIGNAL(configurationChanged(QNetworkConfiguration)),
this, SIGNAL(configurationChanged(QNetworkConfiguration)));
connect(priv, SIGNAL(onlineStateChanged(bool)),
this, SIGNAL(onlineStateChanged(bool)));
connect(priv, SIGNAL(configurationUpdateComplete()),
this, SIGNAL(updateCompleted()));
priv->enablePolling();
priv->enablePolling();
}
}
/*!

View File

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

View File

@ -265,6 +265,8 @@ static RoleMapping map[] = {
//: Role of an accessible object
{ QAccessible::Desktop, ATSPI_ROLE_DESKTOP_FRAME, QT_TRANSLATE_NOOP("QSpiAccessibleBridge", "desktop") },
//: 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") }
};

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@ -71,6 +71,24 @@ QImage::Format QNSWindowBackingStore::format() const
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
screen.
@ -217,6 +235,7 @@ void QNSWindowBackingStore::flush(QWindow *window, const QRegion &region, const
QCocoaWindow *topLevelCocoaWindow = static_cast<QCocoaWindow *>(topLevelWindow->handle());
if (Q_UNLIKELY(topLevelCocoaWindow->m_needsInvalidateShadow)) {
qCDebug(lcQpaBackingStore) << "Invalidating window shadow for" << topLevelCocoaWindow;
[topLevelView.window invalidateShadow];
topLevelCocoaWindow->m_needsInvalidateShadow = false;
}
@ -382,10 +401,11 @@ void QCALayerBackingStore::ensureBackBuffer()
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;
const NSView *backingStoreView = static_cast<QCocoaWindow *>(window()->handle())->view();
const NSView *backingStoreView = platformWindow->view();
Q_UNUSED(backingStoreView);
auto bufferSizeMismatch = [&](const QSize requested, const QSize actual) {

View File

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

View File

@ -377,16 +377,9 @@ bool QCocoaEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags)
NSEvent* event = nil;
// First, send all previously excluded input events, if any:
if (!excludeUserEvents) {
while (!d->queuedUserInputEvents.isEmpty()) {
event = static_cast<NSEvent *>(d->queuedUserInputEvents.takeFirst());
if (!filterNativeEvent("NSEvent", event, nullptr)) {
[NSApp sendEvent:event];
retVal = true;
}
[event release];
}
}
if (d->sendQueuedUserInputEvents())
retVal = true;
// 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
@ -843,6 +836,23 @@ void QCocoaEventDispatcherPrivate::waitingObserverCallback(CFRunLoopObserverRef,
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()
{
if (blockSendPostedEvents) {
@ -896,6 +906,7 @@ void QCocoaEventDispatcherPrivate::postedEventsSourceCallback(void *info)
d->maybeCancelWaitForMoreEvents();
return;
}
d->sendQueuedUserInputEvents();
d->processPostedEvents();
d->maybeCancelWaitForMoreEvents();
}

View File

@ -1011,16 +1011,16 @@ void QCocoaWindow::setMask(const QRegion &region)
} else {
m_view.layer.mask = nil;
}
}
if (isContentView()) {
// Setting the mask requires invalidating the NSWindow shadow, but that needs
// to happen after the backingstore has been redrawn, so that AppKit can pick
// up the new window shape based on the backingstore content. Doing a display
// directly here is not an option, as the window might not be exposed at this
// time, and so would not result in an updated backingstore.
m_needsInvalidateShadow = true;
[m_view setNeedsDisplay:YES];
} else {
if (isContentView()) {
// Setting the mask requires invalidating the NSWindow shadow, but that needs
// to happen after the backingstore has been redrawn, so that AppKit can pick
// up the new window shape based on the backingstore content. Doing a display
// directly here is not an option, as the window might not be exposed at this
// time, and so would not result in an updated backingstore.
m_needsInvalidateShadow = true;
[m_view setNeedsDisplay:YES];
}
}
}

View File

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

View File

@ -77,6 +77,7 @@
#include <QtCore/qoperatingsystemversion.h>
#include <QtCore/qsysinfo.h>
#include <QtCore/qscopedpointer.h>
#include <QtCore/quuid.h>
#include <QtCore/private/qsystemlibrary_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
// The first instance gets the unmodified name; if the class
// 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;
const HINSTANCE appInstance = static_cast<HINSTANCE>(GetModuleHandle(nullptr));
@ -555,7 +556,7 @@ QString QWindowsContext::registerWindowClass(QString cname,
}
if (classExists)
cname += QString::number(reinterpret_cast<quintptr>(proc));
cname += QUuid::createUuid().toString();
if (d->m_registeredWindowClassNames.contains(cname)) // already registered in our list
return cname;

View File

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

View File

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

View File

@ -184,6 +184,9 @@ public:
static void setWindowTitle(const QXcbConnection *conn, xcb_window_t window, const QString &title);
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:
void updateSyncRequestCounter();
@ -276,6 +279,7 @@ protected:
SyncState m_syncState = NoSyncNeeded;
QXcbSyncWindowRequest *m_pendingSyncRequest = nullptr;
int m_swapInterval = -1;
};
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 pal = QCommonStyle::standardPalette();
pal.setColor(QPalette::Disabled, QPalette::Dark, QColor(191, 191, 191));
pal.setColor(QPalette::Active, QPalette::Dark, QColor(191, 191, 191));
pal.setColor(QPalette::Inactive, QPalette::Dark, QColor(191, 191, 191));
return pal;
auto platformTheme = QGuiApplicationPrivate::platformTheme();
auto styleNames = platformTheme->themeHint(QPlatformTheme::StyleNames);
if (styleNames.toStringList().contains("macintosh"))
return *platformTheme->palette();
else
return QStyle::standardPalette();
}
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),
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()) {
QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal;
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);
if (opt->direction == Qt::LeftToRight)
iconRect.moveLeft(iconRect.left() + checkableOffset);
iconRect.moveLeft(iconRect.left());
else
iconRect.moveRight(iconRect.right() - checkableOffset);
iconRect.moveRight(iconRect.right());
iconRule.drawRule(p, iconRect);
QRect pmr(0, 0, pixw, pixh);
pmr.moveCenter(iconRect.center());
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);
textRect.setLeft(textRect.left() + textOffset);
textRect.setLeft(textRect.left() + m->maxIconWidth);
textRect.setWidth(textRect.width() - mi.tabWidth);
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')))
sz.rwidth() += 12; //as in QCommonStyle
bool checkable = mi->checkType != QStyleOptionMenuItem::NotCheckable;
int checkableWidth = 0;
if (checkable) {
if (!mi->icon.isNull()) {
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);
QRect checkmarkRect = positionRect(w, subRule, subSubRule, PseudoElement_MenuCheckMark, opt->rect, opt->direction);
checkableWidth = std::max(mi->maxIconWidth, checkmarkRect.width());
}
if (!mi->icon.isNull()) {
QPixmap pixmap = mi->icon.pixmap(pixelMetric(PM_SmallIconSize));
sz.rwidth() += pixmap.width();
sz.rwidth() += std::max(mi->maxIconWidth, checkmarkRect.width()) + 4;
}
if (subRule.hasFont) {
QFontMetrics fm(subRule.font);
const QRect r = fm.boundingRect(QRect(), Qt::TextSingleLine | Qt::TextShowMnemonic, mi->text);
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));
}
}

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();
void devicePixelRatio_data();
void devicePixelRatio();
private:
QString prefix;
QTemporaryDir m_temporaryDir;
@ -1976,6 +1979,28 @@ void tst_QImageReader::preserveTexts()
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)
#include "tst_qimagereader.moc"

View File

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

View File

@ -34,3 +34,14 @@ setPen blue 40 solidline roundcap
drawPath revbez
setPen red 0
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