⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qdrawhelper_mmx_p.h

📁 奇趣公司比较新的qt/emd版本
💻 H
📖 第 1 页 / 共 2 页
字号:
            m64 d = MM::load(dest[i]);            m64 da = MM::byte_mul(MM::alpha(d), ca);            dest[i] = MM::store(MM::interpolate_pixel_255(                                   MM::load(src[i]), da, d, cia));        }    }    MM::end();}/*  result = d * sa  dest = d * sa * ca + d * cia       = d * (sa * ca + cia)*/template <class MM>static void QT_FASTCALL comp_func_solid_DestinationIn(uint *dest, int length, uint src, uint const_alpha){    C_80; C_00;    m64 a = MM::alpha(MM::load(src));    if (const_alpha != 255) {        C_FF;        m64 ca = MM::load_alpha(const_alpha);        m64 cia = MM::negate(ca);        a = MM::byte_mul(a, ca);        a = MM::add(a, cia);    }    for (int i = 0; i < length; ++i)        dest[i] = MM::store(MM::byte_mul(MM::load(dest[i]), a));    MM::end();}template <class MM>static void QT_FASTCALL comp_func_DestinationIn(uint *dest, const uint *src, int length, uint const_alpha){    C_FF; C_80; C_00;    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            m64 a = MM::alpha(MM::load(src[i]));            dest[i] = MM::store(MM::byte_mul(MM::load(dest[i]), a));        }    } else {        m64 ca = MM::load_alpha(const_alpha);        m64 cia = MM::negate(ca);        for (int i = 0; i < length; ++i) {            m64 d = MM::load(dest[i]);            m64 a = MM::alpha(MM::load(src[i]));            a = MM::byte_mul(a, ca);            a = MM::add(a, cia);            dest[i] = MM::store(MM::byte_mul(d, a));        }    }    MM::end();}/*  result = s * dia  dest = s * dia * ca + d * cia*/template <class MM>static void QT_FASTCALL comp_func_solid_SourceOut(uint *dest, int length, uint src, uint const_alpha){    C_FF; C_80; C_00;    m64 s = MM::load(src);    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            m64 dia = MM::negate(MM::alpha(MM::load(dest[i])));            dest[i] = MM::store(MM::byte_mul(s, dia));        }    } else {        m64 ca = MM::load_alpha(const_alpha);        m64 cia = MM::negate(ca);        s = MM::byte_mul(s, ca);        for (int i = 0; i < length; ++i) {            m64 d = MM::load(dest[i]);            dest[i] = MM::store(MM::interpolate_pixel_255(s, MM::negate(MM::alpha(d)), d, cia));        }    }    MM::end();}template <class MM>static void QT_FASTCALL comp_func_SourceOut(uint *dest, const uint *src, int length, uint const_alpha){    C_FF; C_80; C_00;    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            m64 ia = MM::negate(MM::alpha(MM::load(dest[i])));            dest[i] = MM::store(MM::byte_mul(MM::load(src[i]), ia));        }    } else {        m64 ca = MM::load_alpha(const_alpha);        m64 cia = MM::negate(ca);        for (int i = 0; i < length; ++i) {            m64 d = MM::load(dest[i]);            m64 dia = MM::byte_mul(MM::negate(MM::alpha(d)), ca);            dest[i] = MM::store(MM::interpolate_pixel_255(MM::load(src[i]), dia, d, cia));        }    }    MM::end();}/*  result = d * sia  dest = d * sia * ca + d * cia       = d * (sia * ca + cia)*/template <class MM>static void QT_FASTCALL comp_func_solid_DestinationOut(uint *dest, int length, uint src, uint const_alpha){    C_FF; C_80; C_00;    m64 a = MM::negate(MM::alpha(MM::load(src)));    if (const_alpha != 255) {        m64 ca = MM::load_alpha(const_alpha);        a = MM::byte_mul(a, ca);        a = MM::add(a, MM::negate(ca));    }    for (int i = 0; i < length; ++i)        dest[i] = MM::store(MM::byte_mul(MM::load(dest[i]), a));    MM::end();}template <class MM>static void QT_FASTCALL comp_func_DestinationOut(uint *dest, const uint *src, int length, uint const_alpha){    C_FF; C_80; C_00;    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            m64 a = MM::negate(MM::alpha(MM::load(src[i])));            dest[i] = MM::store(MM::byte_mul(MM::load(dest[i]), a));        }    } else {        m64 ca = MM::load_alpha(const_alpha);        m64 cia = MM::negate(ca);        for (int i = 0; i < length; ++i) {            m64 d = MM::load(dest[i]);            m64 a = MM::negate(MM::alpha(MM::load(src[i])));            a = MM::byte_mul(a, ca);            a = MM::add(a, cia);            dest[i] = MM::store(MM::byte_mul(d, a));        }    }    MM::end();}/*  result = s*da + d*sia  dest = s*da*ca + d*sia*ca + d *cia       = s*ca * da + d * (sia*ca + cia)       = s*ca * da + d * (1 - sa*ca)*/template <class MM>static void QT_FASTCALL comp_func_solid_SourceAtop(uint *dest, int length, uint src, uint const_alpha){    C_FF; C_80; C_00;    m64 s = MM::load(src);    if (const_alpha != 255) {        m64 ca = MM::load_alpha(const_alpha);        s = MM::byte_mul(s, ca);    }    m64 a = MM::negate(MM::alpha(s));    for (int i = 0; i < length; ++i) {        m64 d = MM::load(dest[i]);        dest[i] = MM::store(MM::interpolate_pixel_255(s, MM::alpha(d), d, a));    }    MM::end();}template <class MM>static void QT_FASTCALL comp_func_SourceAtop(uint *dest, const uint *src, int length, uint const_alpha){    C_FF; C_80; C_00;    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            m64 s = MM::load(src[i]);            m64 d = MM::load(dest[i]);            dest[i] = MM::store(MM::interpolate_pixel_255(s, MM::alpha(d), d,                                                        MM::negate(MM::alpha(s))));        }    } else {        m64 ca = MM::load_alpha(const_alpha);        for (int i = 0; i < length; ++i) {            m64 s = MM::load(src[i]);            s = MM::byte_mul(s, ca);            m64 d = MM::load(dest[i]);            dest[i] = MM::store(MM::interpolate_pixel_255(s, MM::alpha(d), d,                                                        MM::negate(MM::alpha(s))));        }    }    MM::end();}/*  result = d*sa + s*dia  dest = d*sa*ca + s*dia*ca + d *cia       = s*ca * dia + d * (sa*ca + cia)*/template <class MM>static void QT_FASTCALL comp_func_solid_DestinationAtop(uint *dest, int length, uint src, uint const_alpha){    C_FF; C_80; C_00;    m64 s = MM::load(src);    m64 a = MM::alpha(s);    if (const_alpha != 255) {        m64 ca = MM::load_alpha(const_alpha);        s = MM::byte_mul(s, ca);        a = MM::alpha(s);        a = MM::add(a, MM::negate(ca));    }    for (int i = 0; i < length; ++i) {        m64 d = MM::load(dest[i]);        dest[i] = MM::store(MM::interpolate_pixel_255(s, MM::negate(MM::alpha(d)), d, a));    }    MM::end();}template <class MM>static void QT_FASTCALL comp_func_DestinationAtop(uint *dest, const uint *src, int length, uint const_alpha){    C_FF; C_80; C_00;    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            m64 s = MM::load(src[i]);            m64 d = MM::load(dest[i]);            dest[i] = MM::store(MM::interpolate_pixel_255(d, MM::alpha(s), s,                                                        MM::negate(MM::alpha(d))));        }    } else {        m64 ca = MM::load_alpha(const_alpha);        for (int i = 0; i < length; ++i) {            m64 s = MM::load(src[i]);            s = MM::byte_mul(s, ca);            m64 d = MM::load(dest[i]);            m64 a = MM::alpha(s);            a = MM::add(a, MM::negate(ca));            dest[i] = MM::store(MM::interpolate_pixel_255(s, MM::negate(MM::alpha(d)),                                                        d, a));        }    }    MM::end();}/*  result = d*sia + s*dia  dest = d*sia*ca + s*dia*ca + d *cia       = s*ca * dia + d * (sia*ca + cia)       = s*ca * dia + d * (1 - sa*ca)*/template <class MM>static void QT_FASTCALL comp_func_solid_XOR(uint *dest, int length, uint src, uint const_alpha){    C_FF; C_80; C_00;    m64 s = MM::load(src);    if (const_alpha != 255) {        m64 ca = MM::load_alpha(const_alpha);        s = MM::byte_mul(s, ca);    }    m64 a = MM::negate(MM::alpha(s));    for (int i = 0; i < length; ++i) {        m64 d = MM::load(dest[i]);        dest[i] = MM::store(MM::interpolate_pixel_255(s, MM::negate(MM::alpha(d)),                                                    d, a));    }    MM::end();}template <class MM>static void QT_FASTCALL comp_func_XOR(uint *dest, const uint *src, int length, uint const_alpha){    C_FF; C_80; C_00;    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            m64 s = MM::load(src[i]);            m64 d = MM::load(dest[i]);            dest[i] = MM::store(MM::interpolate_pixel_255(s, MM::negate(MM::alpha(d)),                                                        d, MM::negate(MM::alpha(s))));        }    } else {        m64 ca = MM::load_alpha(const_alpha);        for (int i = 0; i < length; ++i) {            m64 s = MM::load(src[i]);            s = MM::byte_mul(s, ca);            m64 d = MM::load(dest[i]);            dest[i] = MM::store(MM::interpolate_pixel_255(s, MM::negate(MM::alpha(d)),                                                        d, MM::negate(MM::alpha(s))));        }    }    MM::end();}template <class MM>static inline void qt_blend_color_argb_x86(int count, const QSpan *spans,                                           void *userData,                                           CompositionFunctionSolid *solidFunc){    QSpanData *data = reinterpret_cast<QSpanData *>(userData);    if (data->rasterBuffer->compositionMode == QPainter::CompositionMode_Source        || (data->rasterBuffer->compositionMode == QPainter::CompositionMode_SourceOver            && qAlpha(data->solid.color) == 255)) {        // inline for performance        C_FF; C_80; C_00;        while (count--) {            uint *target = ((uint *)data->rasterBuffer->scanLine(spans->y)) + spans->x;            if (spans->coverage == 255) {                QT_MEMFILL_UINT(target, spans->len, data->solid.color);            } else {                // dest = s * ca + d * (1 - sa*ca) --> dest = s * ca + d * (1-ca)                m64 ca = MM::load_alpha(spans->coverage);                m64 s = MM::byte_mul(MM::load(data->solid.color), ca);                m64 ica = MM::negate(ca);                for (int i = 0; i < spans->len; ++i)                    target[i] = MM::store(MM::add(s, MM::byte_mul(MM::load(target[i]), ica)));            }            ++spans;        }        MM::end();        return;    }    CompositionFunctionSolid func = solidFunc[data->rasterBuffer->compositionMode];    if (!func)        return;    while (count--) {        uint *target = ((uint *)data->rasterBuffer->scanLine(spans->y)) + spans->x;        func(target, spans->len, data->solid.color, spans->coverage);        ++spans;    }}#ifdef QT_HAVE_MMXstruct QMMXIntrinsics : public QMMXCommonIntrinsics{    static inline void end() {        _mm_empty();    }};#endif // QT_HAVE_MMX#endif // QDRAWHELPER_MMX_P_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -