summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesus Fernandez <jesus.fernandez@qt.io>2018-12-03 17:55:58 +0100
committerJesus Fernandez <Jesus.Fernandez@qt.io>2018-12-05 15:56:26 +0000
commit91ebcf2a6c75563bb05b2cf8fac61feb38408dc6 (patch)
tree894b74c1f698058373b4508b54e68704f52f2654
parentbffb574a3c28e4b29b4265b255aeef294e70051a (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.cpp14
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__) { \