ShaderEffectSource QML Type

항목을 렌더링합니다. Qt Quick 항목을 텍스처로 렌더링하여 표시합니다. 더 보기...

Import Statement: import QtQuick
Inherits:

Item

속성

방법

상세 설명

셰이더이펙트소스 유형은 sourceItem 을 텍스처로 렌더링하여 씬에 표시합니다. sourceItem 은 완전히 불투명한 루트 항목인 것처럼 텍스처에 그려집니다. 따라서 sourceItem 자체는 보이지 않지만 텍스처에는 여전히 나타날 수 있습니다.

셰이더이펙트소스를 다음과 같이 사용할 수 있습니다:

  • ShaderEffect의 텍스처 소스로 사용할 수 있습니다. 이렇게 하면 커스텀 셰이더 효과를 모든 Qt Quick 항목에
  • 복잡한 항목의 캐시. 복잡한 항목을 텍스처에 한 번 렌더링한 다음 매 프레임마다 복잡한 항목을 다시 렌더링할 필요 없이 자유롭게 애니메이션을 적용할 수 있습니다.
  • 불투명도 레이어. ShaderEffectSource를 사용하면 각 항목에 개별적으로 적용하지 않고 그룹으로 항목에 불투명도를 적용할 수 있습니다.

import QtQuick 2.0

Rectangle {
    width: 200
    height: 100
    gradient: Gradient {
        GradientStop { position: 0; color: "white" }
        GradientStop { position: 1; color: "black" }
    }
    Row {
        opacity: 0.5
        Item {
            id: foo
            width: 100; height: 100
            Rectangle { x: 5; y: 5; width: 60; height: 60; color: "red" }
            Rectangle { x: 20; y: 20; width: 60; height: 60; color: "orange" }
            Rectangle { x: 35; y: 35; width: 60; height: 60; color: "yellow" }
        }
        ShaderEffectSource {
            width: 100; height: 100
            sourceItem: foo
        }
    }
}

ShaderEffectSource 유형은 마우스 또는 키보드 입력을 sourceItem 로 리디렉션하지 않습니다. visible 을 false로 설정하여 sourceItem 을 숨기거나 opacity 을 0으로 설정하면 더 이상 입력에 반응하지 않습니다. 셰이더이펙트소스가 sourceItem 를 대체하는 경우, 일반적으로 입력을 처리하면서 sourceItem 을 숨기고 싶을 것입니다. 이를 위해 hideSource 프로퍼티를 사용할 수 있습니다.

ShaderEffectSourceMultiEffect 을 결합할 수 있습니다:

  • 여러 효과에서 동일한 소스 항목을 사용하고 변경하지 않으려면.
  • 소스 항목의 일부를 사용하려면 ShaderEffectSource.sourceRect 을 사용합니다.
  • 예를 들어 더 나은 성능을 위해 소스 항목의 해상도를 낮추려면 ShaderEffectSource.textureSize 속성을 사용합니다.

참고: 셰이더이펙트소스는 안티앨리어스 에지에 대한 FBO 멀티샘플링 지원에 의존합니다. 대부분의 임베디드 그래픽 칩처럼 기본 하드웨어가 이를 지원하지 않는 경우, ShaderEffectSource 내부에서 렌더링되는 에지는 앤티앨리어싱되지 않습니다. 이 문제를 해결하는 한 가지 방법은 효과 소스의 크기를 두 배로 늘리고 smooth: true (기본값은 부드러움)으로 렌더링하는 것입니다. 이는 4배 멀티샘플링과 동일하지만 성능이 저하되고 메모리 사용량이 증가합니다.

경고: 대부분의 경우 셰이더이펙트소스를 사용하면 성능이 저하되고 모든 경우에 비디오 메모리 사용량이 증가합니다. 또한 일부 OpenGL 구현은 멀티샘플링된 백버퍼는 지원하지만 멀티샘플링된 프레임버퍼 오브젝트는 지원하지 않으므로 ShaderEffectSource를 통한 렌더링은 품질 저하로 이어질 수 있습니다.

프로퍼티 문서

format : enumeration

이 프로퍼티는 백킹 텍스처의 포맷을 정의합니다. 이 프로퍼티를 수정하는 것은 아이템이 ShaderEffect 의 소스 텍스처로 사용될 때 가장 의미가 있습니다.

Constant설명
ShaderEffectSource.RGBA8
ShaderEffectSource.RGBA16F
ShaderEffectSource.RGBA32F
ShaderEffectSource.AlphaQt 6.0부터 이 값은 사용되지 않으며 실제로는 RGBA8 와 동일한 효과를 갖습니다.
ShaderEffectSource.RGBQt 6.0부터 이 값은 사용되지 않으며 실제로는 RGBA8 와 동일한 효과를 갖습니다.
ShaderEffectSource.RGBAQt 6.0부터 이 값은 사용되지 않으며 실제로는 RGBA8 와 동일한 효과를 갖습니다.

hideSource : bool

이 속성이 참이면 sourceItem 은 숨겨지지만 여전히 텍스처에 렌더링됩니다. visible 을 false로 설정하여 sourceItem 을 숨기는 것과 달리, 이 속성을 true로 설정해도 마우스 또는 키보드 입력이 sourceItem 에 도달하는 것을 방지하지 않습니다. 이 프로퍼티는 ShaderEffectSource 위에 고정되어 sourceItem 을 대체할 때 유용합니다.


live : bool

이 프로퍼티가 참이면 sourceItem 가 업데이트될 때마다 텍스처가 업데이트됩니다. 그렇지 않으면 sourceItem 에 새 항목이 할당되더라도 고정된 이미지가 됩니다. 이 속성은 기본적으로 true입니다.


mipmap : bool

이 속성이 true이면 텍스처에 대한 밉맵이 생성됩니다.

참고: 일부 OpenGL ES 2 구현은 2승이 아닌 텍스처의 밉매핑을 지원하지 않습니다.


recursive : bool

ShaderEffectSource 자체에 종속성이 있는 경우 이 프로퍼티를 true로 설정합니다. 셰이더이펙트소스는 종속성 체인을 형성하며, 여기서 하나의 ShaderEffectSource 는 다른 sourceItem 의 일부가 될 수 있습니다. 이 체인에 루프가 있으면 ShaderEffectSource 이 소스로 사용 중인 텍스처와 동일한 텍스처로 렌더링을 시도할 수 있으며, 이는 OpenGL에서 허용되지 않습니다. 이 속성을 true로 설정하면 ShaderEffectSource 이 이전 프레임의 텍스처 복사본을 유지할 수 있도록 추가 텍스처가 할당됩니다. 그런 다음 하나의 텍스처로 렌더링하고 이전 프레임의 텍스처를 소스로 사용할 수 있습니다.

이 프로퍼티와 live 를 모두 true로 설정하면 씬 그래프가 연속적으로 렌더링됩니다. ShaderEffectSource 은 자체에 종속되므로 업데이트하면 즉시 다시 더럽혀집니다.


samples : int

이 프로퍼티를 사용하면 멀티샘플링 렌더링을 요청할 수 있습니다.

기본적으로 멀티샘플링은 사용 중인 장면 그래프 렌더러와 기본 그래픽 API가 이를 지원한다고 가정할 때 전체 창에 대해 멀티샘플링이 활성화될 때마다 활성화됩니다.

값을 2, 4 등으로 설정하면 전체 장면에 대해 멀티샘플링을 활성화하지 않고도 장면의 일부에 대해 멀티샘플링 렌더링을 요청할 수 있습니다. 이렇게 하면 멀티샘플링이 지정된 서브트리에만 적용되므로 씬의 다른 부분에는 멀티샘플링이 적용되지 않으므로 성능이 크게 향상될 수 있습니다.

참고: 멀티샘플링을 활성화하면 하드웨어 및 드라이버에 따라 성능 및 메모리 비용이 발생하므로 레이어의 크기에 관계없이 비용이 많이 들 수 있습니다.

참고: 이 프로퍼티는 멀티샘플 렌더버퍼 및 프레임버퍼 블릿을 지원할 수 있는 경우에만 작동합니다. 그렇지 않으면 이 값은 자동으로 무시됩니다.


sourceItem : Item

이 프로퍼티는 텍스처에 렌더링할 항목을 보유합니다. live 가 참일 때 이 값을 null로 설정하면 텍스처 리소스가 해제됩니다.


sourceRect : rect

이 프로퍼티는 텍스처에 렌더링할 sourceItem 사각형 영역을 정의합니다. 소스 사각형은 sourceItem 자체보다 클 수 있습니다. 사각형이 기본값인 null인 경우 sourceItem 전체가 텍스처로 렌더링됩니다.


textureMirroring : enumeration

이 속성은 생성된 OpenGL 텍스처가 미러링되는 방식을 정의합니다. 기본값은 ShaderEffectSource.MirrorVertically 입니다. 커스텀 미러링은 생성된 텍스처가 ShaderEffect 에 지정된 것과 같이 커스텀 셰이더에 직접 액세스하는 경우 유용할 수 있습니다. 미러링은 ShaderEffectSource 항목 자체의 UI 표현에는 영향을 미치지 않습니다.

Constant설명
ShaderEffectSource.NoMirroring미러링 없음
ShaderEffectSource.MirrorHorizontally생성된 텍스처가 X축을 따라 반전됩니다.
ShaderEffectSource.MirrorVertically생성된 텍스처가 Y축을 따라 반전됩니다.

textureSize : size

이 프로퍼티는 텍스처의 요청된 픽셀 크기를 보유합니다. 기본값인 비어 있으면 소스 사각형의 크기가 사용됩니다.

참고: 이 값은 텍스처 오브젝트의 크기를 직접 제어하므로 픽셀 단위로 표시됩니다.

참고: 일부 플랫폼에는 프레임버퍼 객체의 크기에 제한이 있으므로 실제 텍스처 크기가 요청된 크기보다 클 수 있습니다.


wrapMode : enumeration

이 프로퍼티는 텍스처와 관련된 OpenGL 래핑 모드를 정의합니다. 이 프로퍼티를 수정하는 것은 아이템이 ShaderEffect 의 소스 텍스처로 사용될 때 가장 적합합니다.

기본값은 ShaderEffectSource.ClampToEdge 입니다.

Constant설명
ShaderEffectSource.ClampToEdgeGL_CLAMP_TO_EDGE 가로 및 세로 모두
ShaderEffectSource.RepeatHorizontally수평은 GL_REPEAT, 수직은 GL_CLAMP_TO_EDGE
ShaderEffectSource.RepeatVertically수평으로 GL_CLAMP_TO_EDGE, 수직으로 GL_REPEAT
ShaderEffectSource.Repeat수평 및 수직 모두 GL_REPEAT

참고: 일부 OpenGL ES 2 구현은 2의 거듭제곱이 아닌 텍스처에서 GL_REPEAT 랩 모드를 지원하지 않습니다.


메서드 문서

scheduleUpdate()

다음 프레임에 텍스처를 다시 렌더링하도록 스케줄링합니다. live 가 거짓일 때 텍스처를 업데이트하려면 이 메서드를 사용합니다.


© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.