QSGTexture Class
QSGTexture 클래스는 씬 그래프에서 사용되는 텍스처의 기본 클래스입니다. 더 보기...
| 헤더: | #include <QSGTexture> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| 상속: | QObject |
| 상속받는 클래스: |
공개 유형
| enum | AnisotropyLevel { AnisotropyNone, Anisotropy2x, Anisotropy4x, Anisotropy8x, Anisotropy16x } |
| enum | Filtering { None, Nearest, Linear } |
| enum | WrapMode { Repeat, ClampToEdge, MirroredRepeat } |
공개 함수
| QSGTexture() | |
| virtual | ~QSGTexture() override |
| QSGTexture::AnisotropyLevel | anisotropyLevel() const |
(since 6.0) virtual void | commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates) |
| virtual qint64 | comparisonKey() const = 0 |
| QRectF | convertToNormalizedSourceRect(const QRectF &rect) const |
| QSGTexture::Filtering | filtering() const |
| virtual bool | hasAlphaChannel() const = 0 |
| virtual bool | hasMipmaps() const = 0 |
| QSGTexture::WrapMode | horizontalWrapMode() const |
| virtual bool | isAtlasTexture() const |
| QSGTexture::Filtering | mipmapFiltering() const |
| QNativeInterface * | nativeInterface() const |
| virtual QRectF | normalizedTextureSubRect() const |
| virtual QSGTexture * | removedFromAtlas(QRhiResourceUpdateBatch *resourceUpdates = nullptr) const |
(since 6.0) virtual QRhiTexture * | rhiTexture() const |
| void | setAnisotropyLevel(QSGTexture::AnisotropyLevel level) |
| void | setFiltering(QSGTexture::Filtering filter) |
| void | setHorizontalWrapMode(QSGTexture::WrapMode hwrap) |
| void | setMipmapFiltering(QSGTexture::Filtering filter) |
| void | setVerticalWrapMode(QSGTexture::WrapMode vwrap) |
| virtual QSize | textureSize() const = 0 |
| QSGTexture::WrapMode | verticalWrapMode() const |
상세 설명
사용자는 YUV 비디오 프레임이나 8비트 알파 마스크와 같은 임의의 입력 텍스처를 지원하기 위해 자체 텍스처 클래스를 자유롭게 구현할 수 있습니다. 씬 그래프는 RGBA 텍스처에 대한 기본 구현을 제공합니다. 기본 구현은 직접 인스턴스화되지 않으며, 대신 QQuickWindow::createTextureFromImage()와 같은 팩토리 함수를 통해 생성됩니다.
기본 구현을 사용하면 각 QSGTexture는 QRhiTexture 로 뒷받침되며, 이는 OpenGL 텍스처나 Vulkan 이미지와 같은 네이티브 텍스처 객체를 포함합니다.
픽셀 단위의 크기는 textureSize()에 의해 지정됩니다. hasAlphaChannel()는 텍스처에 불투명도 값이 포함되어 있는지 여부를 보고하고, hasMipmaps()는 텍스처에 밉맵 레벨이 포함되어 있는지 여부를 보고합니다.
Materials 텍스처와 연동되는 셰이더는 updateSampledImage()를 재구현하여, 주어진 셰이더 리소스 바인딩 지점에서 어떤 QSGTexture의 기본 네이티브 텍스처를 노출할지 결정하는 로직을 제공합니다.
QSGTexture는 이미지(텍스처)와 샘플러 객체를 분리하지 않습니다. 필터링 및 래핑에 대한 매개변수는 setMipmapFiltering(), setFiltering(), setHorizontalWrapMode() 및 setVerticalWrapMode()를 사용하여 지정할 수 있습니다. 해당되는 경우, 씬 그래프와 Qt의 그래픽 추상화 계층이 별도의 샘플러 객체를 생성합니다.
텍스처 아틀라스
일부 씬 그래프 백엔드는 여러 개의 작은 텍스처를 하나의 큰 텍스처로 묶는 텍스처 아틀라스를 사용합니다. 이 경우, isAtlasTexture() 함수는 true를 반환합니다. 아틀라스는 렌더링 알고리즘이 더 효율적인 정렬을 수행하도록 도와 성능을 향상시키는 데 사용됩니다. 아틀라스는 배치 처리(지오메트리를 병합하여 드로우 콜 수를 줄이는 작업)에도 필수적입니다. 서로 다른 두 개의 QSGTexture를 사용하는 동일한 머티리얼의 두 인스턴스는 배치 처리가 불가능하지만, 두 QSGTexture가 모두 동일한 아틀라스를 참조하는 경우, 머티리얼이 그 외의 측면에서 호환된다면 배치 처리가 가능하기 때문입니다.
아틀라스 내 텍스처의 위치는 ` normalizedTextureSubRect()` 함수를 통해 확인할 수 있습니다.
텍스처를 아틀라스 사용이 바람직하지 않은 방식으로 사용하는 경우, removedFromAtlas() 함수를 사용하여 아틀라스에 포함되지 않은 사본을 추출할 수 있습니다.
참고: QSG 접두사가 붙은모든 클래스는 오로지 씬 그래프의 렌더링 스레드에서만 사용해야 합니다. 자세한 내용은 씬 그래프 및 렌더링을 참조하십시오.
멤버 유형 설명서
enum QSGTexture::AnisotropyLevel
텍스처가 화면과 정렬되지 않은 경우 사용할 이방성 필터링 수준을 지정합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QSGTexture::AnisotropyNone | 0 | 이방성 필터링을 적용하지 않습니다. |
QSGTexture::Anisotropy2x | 1 | 2배 이방성 필터링. |
QSGTexture::Anisotropy4x | 2 | 4배 이방성 필터링. |
QSGTexture::Anisotropy8x | 3 | 8배 이방성 필터링. |
QSGTexture::Anisotropy16x | 4 | 16배 이방성 필터링. |
enum QSGTexture::Filtering
텍스처 좌표가 픽셀 정렬되지 않았을 때 텍셀 샘플링이 어떻게 필터링되어야 하는지 지정합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QSGTexture::None | 0 | 필터링이 수행되지 않아야 합니다. 이 값은 setMipmapFiltering()와 함께 사용될 때만 적용됩니다. |
QSGTexture::Nearest | 1 | 샘플링은 가장 가까운 텍셀을 반환합니다. |
QSGTexture::Linear | 2 | 샘플링은 인접한 텍셀에 대한 선형 보간값을 반환합니다. |
enum QSGTexture::WrapMode
샘플러가 텍스처 좌표를 어떻게 처리해야 하는지 지정합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QSGTexture::Repeat | 0 | 텍스처 좌표의 소수부만 사용되므로, 1보다 크거나 0보다 작은 값은 반복됩니다. |
QSGTexture::ClampToEdge | 1 | 1보다 큰 값은 1로, 0보다 작은 값은 0으로 클램핑됩니다. |
QSGTexture::MirroredRepeat | 2 | 텍스처 좌표가 짝수일 때는 소수 부분만 사용됩니다. 홀수일 때는 텍스처 좌표가 ` 1 - fractional part`로 설정됩니다. 이 값은 Qt 5.10에서 도입되었습니다. |
멤버 함수 문서
QSGTexture::QSGTexture()
QSGTexture 기본 클래스를 생성합니다.
[override virtual noexcept] QSGTexture::~QSGTexture()
QSGTexture 를 삭제합니다.
QSGTexture::AnisotropyLevel QSGTexture::anisotropyLevel() const
이 텍스처를 필터링하는 데 사용 중인 이방성 수준을 반환합니다.
setAnisotropyLevel()도 참조하십시오 .
[virtual, since 6.0] void QSGTexture::commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates)
보류 중인 이미지 업로드 작업이 있는 경우, 이 함수를 호출하여 resourceUpdates 에 업로드 작업을 큐에 추가합니다. 새로운 데이터가 없는 경우(예를 들어, 이 함수가 마지막으로 호출된 이후 setImage()가 호출되지 않은 경우), 이 함수는 아무 작업도 수행하지 않습니다.
rhi 텍스처를 사용하는 머티리얼은 일반적으로 updateSampledImage() 구현에서 이 함수를 호출해야 하며, 대개 어떠한 조건도 없이 QSGMaterialShader::RenderState 에서 반환된 state.rhi() 및 state.resourceUpdateBatch() 을 전달합니다.
경고: 이 함수는 렌더링 스레드에서만 호출할 수 있습니다.
이 함수는 Qt 6.0에서 도입되었습니다.
[pure virtual] qint64 QSGTexture::comparisonKey() const
텍스처를 비교하는 데 적합한 키를 반환합니다. 일반적으로 ` QSGMaterial::compare()` 구현에서 사용됩니다.
QSGTexture 포인터를 단순히 비교하는 것만으로는 항상 충분하지 않습니다. 왜냐하면 내부적으로 동일한 네이티브 텍스처 객체를 참조하는 두 개의 QSGTexture 인스턴스도 동일하게 간주되어야 하기 때문입니다. 따라서 이 함수가 필요합니다.
이 함수의 구현체는 아직 그래픽 리소스(네이티브 텍스처 객체)가 없는 경우, 이를 생성해서는 안 되며, 생성해서도 안 됩니다.
기본에 네이티브 텍스처 객체가 없는 QSGTexture 는 일반적으로 다른 어떤 QSGTexture 와도 같지 않으므로, 반환 값은 이에 따라 적절히 설정되어야 합니다. 이에 대한 예외가 있는데, 특히 아틀라스 기법(내부적으로 여러 텍스처가 동일한 아틀라스 텍스처를 공유하는 경우)이 사용되는 경우이며, 이 경우 하위 클래스 구현에서 적절히 처리해야 합니다.
경고: 이 함수는 렌더링 스레드에서만 호출할 수 있습니다.
QRectF QSGTexture::convertToNormalizedSourceRect(const QRectF &rect) const
rect 를 정규화된 좌표로 변환한 값을 반환합니다.
normalizedTextureSubRect()도 참조하십시오 .
QSGTexture::Filtering QSGTexture::filtering() const
이 텍스처에 사용할 샘플링 모드를 반환합니다.
setFiltering()도 참조하십시오 .
[pure virtual] bool QSGTexture::hasAlphaChannel() const
텍스처 데이터에 알파 채널이 포함되어 있으면 true를 반환합니다.
[pure virtual] bool QSGTexture::hasMipmaps() const
텍스처 데이터에 밉맵 레벨이 포함되어 있으면 true를 반환합니다.
QSGTexture::WrapMode QSGTexture::horizontalWrapMode() const
이 텍스처에 적용될 수평 줄바꿈 모드를 반환합니다.
setHorizontalWrapMode()도 참조하십시오 .
[virtual] bool QSGTexture::isAtlasTexture() const
이 텍스처가 아틀라스의 일부인지 여부를 반환합니다.
기본 구현에서는 false를 반환합니다.
QSGTexture::Filtering QSGTexture::mipmapFiltering() const
이 텍스처에서 샘플링할 때 미프매핑을 사용해야 하는지 여부를 반환합니다.
setMipmapFiltering()도 참조하십시오 .
template <typename QNativeInterface> QNativeInterface *QSGTexture::nativeInterface() const
지정된 유형의 텍스처에 대한 네이티브 인터페이스를 반환합니다.
QSGTexture이 함수는 QNativeInterface 의 플랫폼별 기능에 대한 액세스를 제공하며, 이는 네임스페이스에 선언되어 있습니다:
Direct3D 11 텍스처 객체에 대한 액세스를 제공하고 이를 채택할 수 있게 합니다 | |
Direct3D 12 텍스처 객체에 대한 액세스를 제공하고 이를 채택할 수 있게 합니다. | |
Metal 텍스처 객체에 대한 액세스를 제공하고 이를 채택할 수 있도록 합니다 | |
OpenGL 텍스처 객체에 대한 액세스를 제공하고 이를 채택할 수 있게 합니다 | |
Vulkan 이미지 객체에 대한 액세스를 제공하고 이를 채택할 수 있게 합니다 |
이를 통해 OpenGL의 GLuint 텍스처 ID나 Vulkan의 VkImage 핸들 등 기본 네이티브 텍스처 객체에 액세스할 수 있습니다.
요청된 인터페이스를 사용할 수 없는 경우 nullptr 가 반환됩니다.
[virtual] QRectF QSGTexture::normalizedTextureSubRect() const
이 텍스처가 나타내는 ` textureSize()` 내부의 사각형을 정규화된 좌표로 반환합니다.
기본 구현은 (0, 0) 위치에 너비와 높이가 1인 사각형을 반환합니다.
[virtual] QSGTexture *QSGTexture::removedFromAtlas(QRhiResourceUpdateBatch *resourceUpdates = nullptr) const
이 함수는 현재 텍스처의 복사본을 반환하며, 이 복사본은 해당 아틀라스에서 제거됩니다.
현재 텍스처는 변경되지 않으므로 텍스처 좌표를 업데이트할 필요가 없습니다.
아틀라스에서 텍스처를 제거하는 것은 주로 아틀라스 내부의 텍스처 부분 영역 대신 텍스처 좌표 0-1을 사용하는 셰이더로 텍스처를 전달할 때 유용합니다.
텍스처가 텍스처 아틀라스의 일부가 아닌 경우, 이 함수는 0을 반환합니다.
메모리 사용량을 제한하기 위해, 이 함수의 구현체는 여러 번 호출될 때 동일한 인스턴스를 반환하는 것이 좋습니다.
resourceUpdates 는 선택적인 리소스 업데이트 배치로, 텍스처 작업이 있는 경우 이 배치에 큐에 추가됩니다. 머티리얼은 QSGMaterialShader::RenderState 에서 인스턴스를 가져올 수 있습니다. null인 경우, removedFromAtlas() 구현은 자체 배치를 생성하여 즉시 제출합니다. 그러나 유효한 인스턴스가 지정된 경우, 이 함수는 업데이트 배치를 제출하지 않습니다.
경고: 이 함수는 렌더링 스레드에서만 호출할 수 있습니다.
[virtual, since 6.0] QRhiTexture *QSGTexture::rhiTexture() const
이 QSGTexture 에 대한 QRhiTexture 를 반환하거나, 해당 텍스처가 없는 경우 null을 반환합니다(내부적으로 유효한 텍스처가 아직 생성되지 않았거나, 사용 중인 씬그래프 백엔드에 해당 개념이 적용되지 않기 때문일 수 있음).
이 함수는 QRhiTexture 가 없는 경우 새로운 를 생성하지 않습니다. 해당 경우 null을 반환해야 합니다. 렌더러 측에서는 null 텍스처가 있을 경우 대신 투명한 더미 텍스처를 사용하도록 기대됩니다.
경고: 이 함수는 렌더링 스레드에서만 호출할 수 있습니다.
이 함수는 Qt 6.0에서 도입되었습니다.
void QSGTexture::setAnisotropyLevel(QSGTexture::AnisotropyLevel level)
이소방향성 필터링 수준을 ` level`로 설정합니다. 기본값은 ` QSGTexture::AnisotropyNone`이며, 이는 이소방향성 필터링이 활성화되지 않았음을 의미합니다.
참고: 사용 중인 그래픽 API에 따라이 요청이 무시될 수 있습니다. 런타임 시 이방성 필터링이 지원된다는 보장은 없습니다.
anisotropyLevel()도 참조하십시오 .
void QSGTexture::setFiltering(QSGTexture::Filtering filter)
샘플링 모드를 ‘ filter ’로 설정합니다.
filtering()도 참조하십시오 .
void QSGTexture::setHorizontalWrapMode(QSGTexture::WrapMode hwrap)
수평 줄바꿈 모드를 다음과 같이 설정합니다. hwrap
horizontalWrapMode()함수도 참조하십시오 .
void QSGTexture::setMipmapFiltering(QSGTexture::Filtering filter)
미프맵 샘플링 모드를 ‘ filter ’로 설정합니다.
텍스처에 밉맵이 없는 경우, 밉맵 필터링 설정은 아무런 효과가 없습니다.
mipmapFiltering() 및 hasMipmaps()도 참조하십시오 .
void QSGTexture::setVerticalWrapMode(QSGTexture::WrapMode vwrap)
수직 줄바꿈 모드를 다음과 같이 설정합니다. vwrap
verticalWrapMode()도 참조하십시오 .
[pure virtual] QSize QSGTexture::textureSize() const
텍스처의 크기를 픽셀 단위로 반환합니다.
QSGTexture::WrapMode QSGTexture::verticalWrapMode() const
이 텍스처에 적용될 수직 줄바꿈 모드를 반환합니다.
setVerticalWrapMode()도 참조하십시오 .
© 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.