You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ShaderEffectSource不遵循源项scale属性,如何获取正确缩放的渲染结果

问题原因

ShaderEffectSource捕获的是源项自身逻辑尺寸的渲染结果,源项的scale属于父级坐标系下的变换属性,不会改变源项本身的内在渲染分辨率,因此默认捕获到的还是50x50分辨率的原始纹理,后续手动给ShaderEffectSource加缩放只是对低分辨率纹理做插值拉伸,自然会出现模糊。

解决方案

通过textureSize属性手动指定离屏渲染的纹理分辨率,将其和源项的缩放系数绑定,就能直接捕获到缩放后的高清晰度渲染结果,修改后的代码如下:

Row {
    spacing: 100

    Rectangle {
        id: rect
        scale: 2.0
        color: "blue"
        width: 50
        height: 50

        Text {
            text: "TEST"
            color: "white"
            anchors.centerIn: parent
        }
    }

    ShaderEffectSource {
        sourceItem: rect
        live: true
        // 纹理分辨率匹配源项缩放后的实际像素尺寸
        textureSize: Qt.size(rect.width * rect.scale, rect.height * rect.scale)
        // 以下两种显示方式二选一即可
        // 方式1:直接设置宽高为缩放后的尺寸,无需额外scale
        width: rect.width * rect.scale
        height: rect.height * rect.scale
        // 方式2:保持宽高和源项逻辑尺寸一致,额外加scale属性,纹理分辨率足够不会模糊
        // width: rect.width
        // height: rect.height
        // scale: rect.scale
    }
}

修改后ShaderEffectSource会先以放大后的分辨率渲染源项内容,再进行显示,不会出现插值模糊的问题,和源项的缩放效果完全一致。
如果源项的缩放不是来自自身scale属性,而是继承自父容器的缩放,只需要将所有上级变换的总缩放系数计算在内,乘以源项宽高作为textureSize即可。

内容的提问来源于stack exchange,提问作者Murat Şeker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:06:00