이 페이지에서

ShaderEffectSource QML Type

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

Import Statement: import QtQuick
Inherits:

Item

속성

방법

상세 설명

ShaderEffectSource 유형은 셰이더 효과 소스( sourceItem )를 텍스처로 렌더링하여 씬에 표시합니다. 셰이더 효과 소스( sourceItem )는 마치 완전히 불투명한 루트 아이템인 것처럼 텍스처에 그려집니다. 따라서 셰이더 효과 소스( sourceItem ) 자체는 보이지 않을 수 있지만, 텍스처에는 여전히 나타납니다.

ShaderEffectSource는 다음과 같이 사용할 수 있습니다:

  • 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로 설정하거나 opacity 를 0으로 설정하여 sourceItem 를 숨기면 더 이상 입력에 반응하지 않습니다. ShaderEffectSource가 sourceItem 를 대체하도록 의도된 경우, 일반적으로 입력을 계속 처리하면서 sourceItem 를 숨기고 싶을 것입니다. 이를 위해 hideSource 속성을 사용할 수 있습니다.

ShaderEffectSource 와 MultiEffect 를 결합할 수 있습니다:

  • 동일한 소스 항목을 여러 효과에서 사용하고 변경되지 않게 유지하려면.
  • ShaderEffectSource.sourceRect 을 사용하여 소스 항목의 일부만 사용하려면.
  • ShaderEffectSource.textureSize 속성을 사용하여, 예를 들어 성능 향상을 위해 소스 항목의 해상도를 낮추는 경우.

참고: ShaderEffectSource는 가장자리의 앤티앨리어싱 처리를 위해 FBO 멀티샘플링 지원을 필요로 합니다. 대부분의 임베디드 그래픽 칩에서 그렇듯이, 기본 하드웨어가 이를 지원하지 않는 경우 ShaderEffectSource 내에서 렌더링된 가장자리에는 앤티앨리어싱이 적용되지 않습니다. 이를 해결하는 한 가지 방법은 이펙트 소스의 크기를 두 배로 늘리고 smooth: true 을 사용하여 렌더링하는 것입니다(이 값은 smooth의 기본값입니다). 이는 4배 멀티샘플링과 동등한 효과를 내지만, 성능 저하와 메모리 사용량 증가를 초래합니다.

경고: 대부분의 경우 ShaderEffectSource를 사용하면 성능이 저하되며, 모든 경우에 비디오 메모리 사용량이 증가합니다. 또한 일부 OpenGL 구현체는 멀티샘플링된 백버퍼는 지원하지만 멀티샘플링된 프레임버퍼 객체는 지원하지 않기 때문에, ShaderEffectSource를 통한 렌더링은 화질 저하를 초래할 수도 있습니다.

속성 설명

format : enumeration

이 속성은 배경 텍스처의 형식을 정의합니다. 이 속성을 수정하는 것은 해당 항목이 ShaderEffect 의 소스 텍스처로 사용될 때 가장 의미가 있습니다.

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

hideSource : bool

이 속성이 true인 경우, sourceItem 는 숨겨지지만 여전히 텍스처로 렌더링됩니다. visible 를 false로 설정하여 sourceItem 를 숨기는 것과는 달리, 이 속성을 true로 설정해도 마우스나 키보드 입력이 sourceItem 로 전달되는 것을 막지는 않습니다. 이 속성은 ShaderEffectSource 가 sourceItem 위에 고정되어 있으며, 이를 대체하도록 의도된 경우에 유용합니다.

live : bool

이 속성이 true인 경우, sourceItem 가 업데이트될 때마다 텍스처가 업데이트됩니다. 그렇지 않은 경우, sourceItem 에 새로운 항목이 할당되더라도 텍스처는 고정된 이미지로 유지됩니다. 이 속성은 기본적으로 true로 설정되어 있습니다.

mipmap : bool

이 속성이 true인 경우, 해당 텍스처에 대해 밉맵이 생성됩니다.

참고: 일부 OpenGL ES 2 구현체는 2의 거듭제곱 크기가 아닌 텍스처에 대한 밉매핑을 지원하지 않습니다.

recursive : bool

ShaderEffectSource 가 자기 자신에 대한 의존성을 갖는 경우 이 속성을 true로 설정하십시오. ShaderEffectSources는 의존성 체인을 형성하며, 한 ShaderEffectSource 가 다른 의 sourceItem 에 포함될 수 있습니다. 이 체인에 루프가 존재할 경우, ShaderEffectSource 가 소스로 사용하는 것과 동일한 텍스처에 렌더링을 시도하게 될 수 있으며, 이는 OpenGL에서 허용되지 않습니다. 이 속성을 true로 설정하면, ShaderEffectSource 가 이전 프레임의 텍스처 사본을 유지할 수 있도록 추가 텍스처가 할당됩니다. 그러면 한 텍스처에 렌더링하면서 이전 프레임의 텍스처를 소스로 사용할 수 있습니다.

이 속성과 ` live `을 모두 `true`로 설정하면 씬 그래프가 지속적으로 렌더링됩니다. ` ShaderEffectSource `는 자체에 의존하기 때문에, 이를 업데이트하면 즉시 다시 변경된 상태가 됩니다.

samples : int

이 속성을 사용하면 멀티샘플링 렌더링을 요청할 수 있습니다.

기본적으로, 사용 중인 씬그래프 렌더러와 기본 그래픽 API가 이를 지원하는 경우, 전체 창에 대해 멀티샘플링이 활성화되어 있으면 이 속성도 자동으로 활성화됩니다.

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

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

참고: 이 속성은 멀티샘플 렌더 버퍼 및 프레임 버퍼 블릿이 지원되는 경우에만 작동합니다. 그렇지 않은 경우 해당 값은 아무런 알림 없이 무시됩니다.

sourceItem : Item

이 속성은 텍스처로 렌더링될 항목을 보관합니다. ` live `가 true인 상태에서 이 값을 null로 설정하면 텍스처 리소스가 해제됩니다.

sourceRect : rect

이 속성은 sourceItem 의 어떤 직사각형 영역을 텍스처에 렌더링할지 정의합니다. 소스 직사각형은 sourceItem 자체보다 더 클 수 있습니다. 직사각형이 null인 경우(기본값), sourceItem 전체가 텍스처에 렌더링됩니다.

textureMirroring : enumeration

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

상수설명
ShaderEffectSource.NoMirroring미러링 없음
ShaderEffectSource.MirrorHorizontally생성된 텍스처가 X축을 기준으로 반전됩니다.
ShaderEffectSource.MirrorVertically생성된 텍스처가 Y축을 기준으로 반전됩니다.

textureSize : size

이 속성은 텍스처의 요청된 픽셀 크기를 저장합니다. 이 속성이 비어 있는 경우(기본값), 소스 사각형의 크기가 사용됩니다.

참고: 이 값은 텍스처 객체의 크기를 직접 제어하므로 픽셀 단위로 지정됩니다.

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

wrapMode : enumeration

이 속성은 텍스처와 관련된 OpenGL 래핑 모드를 정의합니다. 이 속성을 수정하는 것은 해당 항목이 ShaderEffect 의 소스 텍스처로 사용될 때 가장 의미가 있습니다.

기본값은 ShaderEffectSource.ClampToEdge 입니다.

상수설명
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 래핑 모드를 지원하지 않습니다.

메서드 문서

void scheduleUpdate()

다음 프레임을 위해 텍스처의 재렌더링을 예약합니다. ` live `가 false일 때 텍스처를 업데이트하려면 이 기능을 사용하십시오.

© 2026 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.