diff options
author | Jesus Fernandez <jesus.fernandez@qt.io> | 2018-12-03 17:55:58 +0100 |
---|---|---|
committer | Jesus Fernandez <Jesus.Fernandez@qt.io> | 2018-12-05 15:56:26 +0000 |
commit | 91ebcf2a6c75563bb05b2cf8fac61feb38408dc6 (patch) | |
tree | 894b74c1f698058373b4508b54e68704f52f2654 | |
parent | bffb574a3c28e4b29b4265b255aeef294e70051a (diff) |
Fix calling convention in Win32
A mismatch with the calling convention was messing up the stack
of the caller function. OpenGL calls in Win32 are expected to be
using the call convention defined in GL_APIENTRY instead of the
compiler default.
Task-number: QTBUG-72129
Change-Id: I460b083a2cb03a297904a2bcfd13e7e704b2e136
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
-rw-r--r-- | src/plugins/platforms/webgl/qwebglcontext.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/plugins/platforms/webgl/qwebglcontext.cpp b/src/plugins/platforms/webgl/qwebglcontext.cpp index 07378a2..6bac008 100644 --- a/src/plugins/platforms/webgl/qwebglcontext.cpp +++ b/src/plugins/platforms/webgl/qwebglcontext.cpp @@ -472,24 +472,30 @@ namespace QWebGL { ParameterTypeTraits<TYPEOF(ITEM)>::isArray() \ } +#if defined(Q_CC_MSVC) && defined(Q_OS_WIN32) && !defined(Q_OS_WIN64) +# define WEBGL_APIENTRY __stdcall +#else +# define WEBGL_APIENTRY +#endif + #define QWEBGL_FUNCTION(REMOTE_NAME, RET_TYPE, LOCAL_NAME, ...) \ - RET_TYPE LOCAL_NAME(FOR_EACH(TYPEOF, __VA_ARGS__));\ + RET_TYPE WEBGL_APIENTRY LOCAL_NAME(FOR_EACH(TYPEOF, __VA_ARGS__));\ extern const GLFunction REMOTE_NAME { \ #REMOTE_NAME, \ #LOCAL_NAME, \ reinterpret_cast<QFunctionPointer>(LOCAL_NAME), \ GLFunction::ParameterList({FOR_EACH(QWEBGL_FUNCTION_PARAMETER, __VA_ARGS__)}) \ }; \ - RET_TYPE LOCAL_NAME(FOR_EACH(PAIR, __VA_ARGS__)) + RET_TYPE WEBGL_APIENTRY LOCAL_NAME(FOR_EACH(PAIR, __VA_ARGS__)) #define QWEBGL_FUNCTION_NO_PARAMS(REMOTE_NAME, RET_TYPE, LOCAL_NAME) \ - RET_TYPE LOCAL_NAME();\ + RET_TYPE WEBGL_APIENTRY LOCAL_NAME();\ extern const GLFunction REMOTE_NAME { \ #REMOTE_NAME, \ #LOCAL_NAME, \ (QFunctionPointer) LOCAL_NAME \ }; \ - RET_TYPE LOCAL_NAME() + RET_TYPE WEBGL_APIENTRY LOCAL_NAME() #define QWEBGL_FUNCTION_POSTEVENT(REMOTE_NAME, LOCAL_NAME, ...) \ QWEBGL_FUNCTION(REMOTE_NAME, void, LOCAL_NAME, __VA_ARGS__) { \ |