diff options
author | Samuel Rødal <sroedal@trolltech.com> | 2009-12-07 10:03:42 +0100 |
---|---|---|
committer | Samuel Rødal <sroedal@trolltech.com> | 2009-12-14 15:18:36 +0100 |
commit | 9c4a79038fcd2c2a90a277db81aaadac50eaa59a (patch) | |
tree | 05af6d76da4c120341d784b6e18671d769025652 /src/gui/painting | |
parent | b543f356ca9f4a1db72e937968f06804df7c17bd (diff) | |
download | qt4-tools-9c4a79038fcd2c2a90a277db81aaadac50eaa59a.tar.gz |
Optimized blur / drop shadow effects for the GL 2 paint engine.
Do the blur in half the resolution in software and then upload the
result as a texture and smooth-scale it on the GPU. This leads to stable
and decent performance regardless of the blur radius, and simplifies the
implementation quite a bit.
Reviewed-by: Bjørn Erik Nilsen
Diffstat (limited to 'src/gui/painting')
-rw-r--r-- | src/gui/painting/qmemrotate.cpp | 21 | ||||
-rw-r--r-- | src/gui/painting/qmemrotate_p.h | 2 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/gui/painting/qmemrotate.cpp b/src/gui/painting/qmemrotate.cpp index 67dc2c7954..e3a6f78d45 100644 --- a/src/gui/painting/qmemrotate.cpp +++ b/src/gui/painting/qmemrotate.cpp @@ -572,5 +572,26 @@ QT_IMPL_MEMROTATE(quint32, qrgb_generic16) QT_IMPL_MEMROTATE(quint16, qrgb_generic16) #endif +struct qrgb_gl_rgba +{ +public: + inline qrgb_gl_rgba(quint32 v) { + if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) + data = ((v << 16) & 0xff0000) | ((v >> 16) & 0xff) | (v & 0xff00ff00); + else + data = (v << 8) | ((v >> 24) & 0xff); + } + + inline operator quint32() const { return data; } + +private: + quint32 data; +} Q_PACKED; + +void Q_GUI_EXPORT qt_memrotate90_gl(const quint32 *src, int srcWidth, int srcHeight, int srcStride, + quint32 *dest, int dstStride) +{ + qt_memrotate90_template(src, srcWidth, srcHeight, srcStride, reinterpret_cast<qrgb_gl_rgba *>(dest), dstStride); +} QT_END_NAMESPACE diff --git a/src/gui/painting/qmemrotate_p.h b/src/gui/painting/qmemrotate_p.h index 676a880cdf..8aee575fca 100644 --- a/src/gui/painting/qmemrotate_p.h +++ b/src/gui/painting/qmemrotate_p.h @@ -81,6 +81,8 @@ QT_BEGIN_NAMESPACE void Q_GUI_QWS_EXPORT qt_memrotate180(const srctype*, int, int, int, desttype*, int); \ void Q_GUI_QWS_EXPORT qt_memrotate270(const srctype*, int, int, int, desttype*, int) +void Q_GUI_EXPORT qt_memrotate90(const quint32*, int, int, int, quint32*, int); + QT_DECL_MEMROTATE(quint32, quint32); QT_DECL_MEMROTATE(quint32, quint16); QT_DECL_MEMROTATE(quint16, quint32); |