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는 OpenGL 텍스처 또는 Vulkan 이미지와 같은 기본 텍스처 객체를 포함하는 QRhiTexture 에 의해 뒷받침됩니다.
픽셀 단위의 크기는 textureSize()로 지정됩니다. hasAlphaChannel()는 텍스처에 불투명도 값이 포함되어 있으면 보고하고 hasMipmaps()는 텍스처에 밉맵 레벨이 포함되어 있으면 보고합니다.
Materials 텍스처와 함께 작동하는 함수는 updateSampledImage()를 재구현하여 주어진 셰이더 리소스 바인딩 지점에 어떤 QSGTexture의 기본 네이티브 텍스처를 노출할지 결정하는 로직을 제공합니다.
QSGTexture는 이미지(텍스처)와 샘플러 오브젝트를 분리하지 않습니다. 필터링 및 래핑을 위한 파라미터는 setMipmapFiltering(), setFiltering(), setHorizontalWrapMode() 및 setVerticalWrapMode()로 지정할 수 있습니다. 씬 그래프와 Qt의 그래픽 추상화는 해당되는 경우 별도의 샘플러 객체 생성을 처리합니다.
텍스처 아틀라스
일부 씬 그래프 백엔드는 텍스처 아틀라스를 사용하여 여러 개의 작은 텍스처를 하나의 큰 텍스처로 그룹화합니다. 이 경우 isAtlasTexture() 함수는 참을 반환합니다. 아틀라스는 렌더링 알고리즘이 더 나은 정렬을 수행하도록 지원하여 성능을 향상시키는 데 사용됩니다. 아틀라스는 배치(지오메트리를 병합하여 드로 콜 수를 줄이는 것)에도 필수적인데, 두 개의 다른 QSGTexture를 사용하는 동일한 머티리얼의 두 인스턴스는 배치가 불가능하지만 두 QSGTexture가 동일한 아틀라스를 참조하면 머티리얼이 호환된다는 가정 하에 배치가 가능하기 때문입니다.
아틀라스 내 텍스처의 위치는 normalizedTextureSubRect() 함수를 사용하여 지정할 수 있습니다.
텍스처가 아틀라스가 바람직하지 않은 방식으로 사용되는 경우 removedFromAtlas() 함수를 사용하여 아틀라스가 아닌 사본을 추출할 수 있습니다.
참고: 접두사가 QSG인 모든 클래스는 씬 그래프의 렌더링 스레드에서만 사용해야 합니다. 자세한 내용은 씬 그래프 및 렌더링을 참조하십시오.
멤버 유형 문서
enum QSGTexture::AnisotropyLevel
텍스처가 화면 정렬되지 않았을 때 사용할 비등방성 필터링 수준을 지정합니다.
Constant | 값 | 설명 |
---|---|---|
QSGTexture::AnisotropyNone | 0 | 비등방성 필터링 없음. |
QSGTexture::Anisotropy2x | 1 | 2배 비등방성 필터링. |
QSGTexture::Anisotropy4x | 2 | 4배 비등방성 필터링. |
QSGTexture::Anisotropy8x | 3 | 8배 비등방성 필터링. |
QSGTexture::Anisotropy16x | 4 | 16배 비등방성 필터링. |
enum QSGTexture::Filtering
텍스처 좌표가 픽셀 정렬되지 않은 경우 텍스처 샘플링을 필터링하는 방법을 지정합니다.
Constant | 값 | 설명 |
---|---|---|
QSGTexture::None | 0 | 필터링이 발생하지 않습니다. 이 값은 setMipmapFiltering()와 함께만 사용됩니다. |
QSGTexture::Nearest | 1 | 샘플링은 가장 가까운 텍셀을 반환합니다. |
QSGTexture::Linear | 2 | 샘플링은 인접한 텍셀의 선형 보간을 반환합니다. |
enum QSGTexture::WrapMode
샘플러가 텍스처 좌표를 처리하는 방법을 지정합니다.
Constant | 값 | 설명 |
---|---|---|
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() 구현에서 이 함수를 호출하여 state.rhi()
및 state.resourceUpdateBatch()
을 QSGMaterialShader::RenderState 에서 전달해야 합니다.
경고: 이 함수는 렌더링 스레드에서만 호출할 수 있습니다.
이 함수는 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
텍스처에 대해 지정된 유형의 네이티브 인터페이스를 반환합니다.
이 함수는 QNativeInterface 네임스페이스에 선언된 QSGTexture 의 플랫폼별 기능에 대한 액세스를 제공합니다:
Direct3D 11 텍스처 오브젝트에 대한 액세스를 제공하고 채택을 활성화합니다. | |
Direct3D 12 텍스처 오브젝트에 대한 액세스를 제공하고 채택을 활성화합니다. | |
Metal 텍스처 오브젝트에 대한 액세스를 제공하고 채택을 활성화합니다. | |
OpenGL 텍스처 개체에 대한 액세스 및 채택을 활성화합니다. | |
Vulkan 이미지 오브젝트에 대한 액세스를 제공하고 이를 채택할 수 있도록 합니다. |
이를 통해 기본 네이티브 텍스처 오브젝트(예: OpenGL의 경우 GLuint
텍스처 ID 또는 Vulkan의 경우 VkImage
핸들)에 액세스할 수 있습니다.
요청된 인터페이스를 사용할 수 없는 경우 nullptr
이 반환됩니다.
[virtual]
QRectF QSGTexture::normalizedTextureSubRect() const
이 텍스처가 정규화된 좌표로 나타내는 textureSize() 내부의 직사각형을 반환합니다.
기본 구현은 너비와 높이가 1인 위치 (0, 0)의 직사각형을 반환합니다.
[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()도 참조하세요 .
© 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.