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

📄 qdrawhelper_x86.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    end_mmx();}/*  result = d * sa  dest = d * sa * ca + d * cia       = d * (sa * ca + cia)*/static void QT_FASTCALL comp_func_solid_DestinationIn(uint *dest, int length, uint src, uint const_alpha){    C_80; C_00;    m64 a = alpha(load(src));    if (const_alpha != 255) {        C_FF;        m64 ca = load_alpha(const_alpha);        m64 cia = negate(ca);        a = byte_mul(a, ca);        a = add(a, cia);    }    for (int i = 0; i < length; ++i)        dest[i] = store(byte_mul(load(dest[i]), a));    end_mmx();}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 = alpha(load(src[i]));            dest[i] = store(byte_mul(load(dest[i]), a));        }    } else {        m64 ca = load_alpha(const_alpha);        m64 cia = negate(ca);        for (int i = 0; i < length; ++i) {            m64 d = load(dest[i]);            m64 a = alpha(load(src[i]));            a = byte_mul(a, ca);            a = add(a, cia);            dest[i] = store(byte_mul(d, a));        }    }    end_mmx();}/*  result = s * dia  dest = s * dia * ca + d * cia*/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 = load(src);    if (const_alpha == 255) {        for (int i = 0; i < length; ++i) {            m64 dia = negate(alpha(load(dest[i])));            dest[i] = store(byte_mul(s, dia));        }    } else {        m64 ca = load_alpha(const_alpha);        m64 cia = negate(ca);        s = byte_mul(s, ca);        for (int i = 0; i < length; ++i) {            m64 d = load(dest[i]);            dest[i] = store(interpolate_pixel_255(s, negate(alpha(d)), d, cia));        }    }    end_mmx();}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 = negate(alpha(load(dest[i])));            dest[i] = store(byte_mul(load(src[i]), ia));        }    } else {        m64 ca = load_alpha(const_alpha);        m64 cia = negate(ca);        for (int i = 0; i < length; ++i) {            m64 d = load(dest[i]);            m64 dia = byte_mul(negate(alpha(d)), ca);            dest[i] = store(interpolate_pixel_255(load(src[i]), dia, d, cia));        }    }    end_mmx();}/*  result = d * sia  dest = d * sia * ca + d * cia       = d * (sia * ca + cia)*/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 = negate(alpha(load(src)));    if (const_alpha != 255) {        m64 ca = load_alpha(const_alpha);        a = byte_mul(a, ca);        a = add(a, negate(ca));    }    for (int i = 0; i < length; ++i)        dest[i] = store(byte_mul(load(dest[i]), a));    end_mmx();}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 = negate(alpha(load(src[i])));            dest[i] = store(byte_mul(load(dest[i]), a));        }    } else {        m64 ca = load_alpha(const_alpha);        m64 cia = negate(ca);        for (int i = 0; i < length; ++i) {            m64 d = load(dest[i]);            m64 a = negate(alpha(load(src[i])));            a = byte_mul(a, ca);            a = add(a, cia);            dest[i] = store(byte_mul(d, a));        }    }    end_mmx();}/*  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)*/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 = load(src);    if (const_alpha != 255) {        m64 ca = load_alpha(const_alpha);        s = byte_mul(s, ca);    }    m64 a = negate(alpha(s));    for (int i = 0; i < length; ++i) {        m64 d = load(dest[i]);        dest[i] = store(interpolate_pixel_255(s, alpha(d), d, a));    }    end_mmx();}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 = load(src[i]);            m64 d = load(dest[i]);            dest[i] = store(interpolate_pixel_255(s, alpha(d), d, negate(alpha(s))));        }    } else {        m64 ca = load_alpha(const_alpha);        for (int i = 0; i < length; ++i) {            m64 s = load(src[i]);            s = byte_mul(s, ca);            m64 d = load(dest[i]);            dest[i] = store(interpolate_pixel_255(s, alpha(d), d, negate(alpha(s))));        }    }    end_mmx();}/*  result = d*sa + s*dia  dest = d*sa*ca + s*dia*ca + d *cia       = s*ca * dia + d * (sa*ca + cia)*/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 = load(src);    m64 a = alpha(s);    if (const_alpha != 255) {        m64 ca = load_alpha(const_alpha);        s = byte_mul(s, ca);        a = alpha(s);        a = add(a, negate(ca));    }    for (int i = 0; i < length; ++i) {        m64 d = load(dest[i]);        dest[i] = store(interpolate_pixel_255(s, negate(alpha(d)), d, a));    }    end_mmx();}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 = load(src[i]);            m64 d = load(dest[i]);            dest[i] = store(interpolate_pixel_255(d, alpha(s), s, negate(alpha(d))));        }    } else {        m64 ca = load_alpha(const_alpha);        for (int i = 0; i < length; ++i) {            m64 s = load(src[i]);            s = byte_mul(s, ca);            m64 d = load(dest[i]);            m64 a = alpha(s);            a = add(a, negate(ca));            dest[i] = store(interpolate_pixel_255(s, negate(alpha(d)), d, a));        }    }    end_mmx();}/*  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)*/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 = load(src);    if (const_alpha != 255) {        m64 ca = load_alpha(const_alpha);        s = byte_mul(s, ca);    }    m64 a = negate(alpha(s));    for (int i = 0; i < length; ++i) {        m64 d = load(dest[i]);        dest[i] = store(interpolate_pixel_255(s, negate(alpha(d)), d, a));    }    end_mmx();}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 = load(src[i]);            m64 d = load(dest[i]);            dest[i] = store(interpolate_pixel_255(s, negate(alpha(d)), d, negate(alpha(s))));        }    } else {        m64 ca = load_alpha(const_alpha);        for (int i = 0; i < length; ++i) {            m64 s = load(src[i]);            s = byte_mul(s, ca);            m64 d = load(dest[i]);            dest[i] = store(interpolate_pixel_255(s, negate(alpha(d)), d, negate(alpha(s))));        }    }    end_mmx();}const CompositionFunctionSolid qt_functionForModeSolid_SSE[] = {        comp_func_solid_SourceOver,        comp_func_solid_DestinationOver,        comp_func_solid_Clear,        comp_func_solid_Source,        0,        comp_func_solid_SourceIn,        comp_func_solid_DestinationIn,        comp_func_solid_SourceOut,        comp_func_solid_DestinationOut,        comp_func_solid_SourceAtop,        comp_func_solid_DestinationAtop,        comp_func_solid_XOR};const CompositionFunction qt_functionForMode_SSE[] = {        comp_func_SourceOver,        comp_func_DestinationOver,        comp_func_Clear,        comp_func_Source,        0,        comp_func_SourceIn,        comp_func_DestinationIn,        comp_func_SourceOut,        comp_func_DestinationOut,        comp_func_SourceAtop,        comp_func_DestinationAtop,        comp_func_XOR};void qt_blend_color_argb_sse(int count, const QSpan *spans, void *userData){    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 = load_alpha(spans->coverage);                m64 s = byte_mul(load(data->solid.color), ca);                m64 ica = negate(ca);                for (int i = 0; i < spans->len; ++i)                    target[i] = store(add(s, byte_mul(load(target[i]), ica)));            }            ++spans;        }        end_mmx();        return;    }    CompositionFunctionSolid func = qt_functionForModeSolid_SSE[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;    }}#endif //QT_HAVE_SSE

⌨️ 快捷键说明

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