QQuickGraphicsConfiguration Class
QQuickGraphicsConfiguration은 QQuickWindow...에 대한 하위 레벨 그래픽 설정을 제어합니다.. ..
헤더: | #include <QQuickGraphicsConfiguration> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
qmake: | QT += quick |
이후: | Qt 6.0 |
공용 함수
QQuickGraphicsConfiguration() | |
~QQuickGraphicsConfiguration() | |
QByteArrayList | deviceExtensions() const |
(since 6.5) bool | isAutomaticPipelineCacheEnabled() const |
bool | isDebugLayerEnabled() const |
bool | isDebugMarkersEnabled() const |
bool | isDepthBufferEnabledFor2D() const |
QString | pipelineCacheLoadFile() const |
QString | pipelineCacheSaveFile() const |
bool | prefersSoftwareDevice() const |
(since 6.5) void | setAutomaticPipelineCache(bool enable) |
(since 6.5) void | setDebugLayer(bool enable) |
(since 6.5) void | setDebugMarkers(bool enable) |
void | setDepthBufferFor2D(bool enable) |
void | setDeviceExtensions(const QByteArrayList &extensions) |
(since 6.5) void | setPipelineCacheLoadFile(const QString &filename) |
(since 6.5) void | setPipelineCacheSaveFile(const QString &filename) |
(since 6.5) void | setPreferSoftwareDevice(bool enable) |
(since 6.6) void | setTimestamps(bool enable) |
(since 6.6) bool | timestampsEnabled() const |
정적 공용 멤버
(since 6.1) QByteArrayList | preferredInstanceExtensions() |
상세 설명
QQuickGraphicsConfiguration 클래스는 벌칸과 같은 기본 그래픽 API가 Qt Quick 씬 그래프를 초기화하는 방식에 영향을 줄 수 있는 저수준 그래픽 설정을 위한 컨테이너입니다. 또한 씬 그래프 렌더러의 특정 측면을 제어할 수도 있습니다.
참고: QQuickWindow 에서 QQuickGraphicsConfiguration 설정은 해당 창에 대해 씬 그래프가 처음 초기화되기 전에 충분히 일찍 이루어져야 합니다. 화면 창을 사용하는 경우 이는 QQuickWindow 또는 QQuickView 에서 show()를 호출하기 전에 호출이 완료되어야 함을 의미합니다. QQuickRenderControl 에서는 initialize()를 호출하기 전에 구성이 완료되어야 합니다.
외부 렌더링 엔진 또는 XR API에 대한 구성
Vulkan을 사용하여 렌더링하는 QQuickWindow 을 구성하고 표시할 때 Vulkan 인스턴스(VkInstance
), 물리적 디바이스(VkPhysicalDevice
), 장치(VkDevice
) 및 관련 오브젝트(대기열, 풀)는 Vulkan API를 통해 초기화됩니다. QQuickRenderControl 을 사용하여 렌더링을 텍스처와 같은 커스텀 렌더 타깃으로 리디렉션할 때도 마찬가지입니다. 이때 QVulkanInstance 구성은 애플리케이션의 제어 하에 있지만 다른 그래픽 객체의 초기화는 QQuickRenderControl::initialize()에서 온스크린 QQuickWindow 과 동일한 방식으로 이루어집니다.
대부분의 애플리케이션에서는 Qt Quick 에서 활성화할 디바이스 확장 등 많은 저수준 그래픽 설정에 대한 합리적인 기본값을 제공하므로 추가 구성이 필요하지 않습니다.
하지만 이것만으로는 충분하지 않을 수도 있습니다. 고급 사용 사례의 경우, Vulkan 또는 기타 그래픽 API 콘텐츠를 직접 통합하거나 OpenXR과 같은 외부 3D 또는 VR 엔진과 통합할 때 애플리케이션은 활성화할 디바이스 확장 등 세부적인 설정에 대해 자체적으로 지정하고 싶을 것입니다.
이 클래스가 바로 이러한 기능을 제공합니다. 예를 들어 이 클래스를 사용하면 벌칸을 사용할 때 씬 그래프에서 선택되는 디바이스 확장 목록이나 해당 개념이 적용되는 그래픽 API를 지정할 수 있습니다. 일부 개념이 적용되지 않는 경우 관련 설정은 무시됩니다.
이 범주에 속하는 함수의 예로는 setDeviceExtensions() 및 preferredInstanceExtensions() 등이 있습니다. 후자는 애플리케이션이 자체적으로 QVulkanInstance 을 관리하고 QWindow::setVulkanInstance()을 통해 QQuickWindow 과 연결할 때 유용합니다.
Qt Quick 씬 그래프 렌더러 구성
또 다른 설정 클래스는 씬 그래프의 렌더러와 관련이 있습니다. 2D 콘텐츠를 렌더링할 때 깊이 버퍼 사용과 같은 특정 동작을 제어하고자 하는 애플리케이션이 있을 수 있습니다. Qt 5에서는 이러한 설정을 전혀 제어할 수 없거나 환경 변수를 통해 관리했습니다. Qt 6에서는 이러한 설정을 위한 새로운 홈을 제공하는 동시에 해당되는 경우 레거시 환경 변수를 계속 지원하도록 QQuickGraphicsConfiguration이 추가되었습니다.
이 범주의 예는 setDepthBufferFor2D()입니다.
그래픽 장치 구성
그래픽 인스턴스와 디바이스 객체(예: Vulkan을 사용하는 VkInstance와 VkDevice, Direct 3D를 사용하는 ID3D11Device 등)가 QQuickWindow 를 초기화할 때 Qt에 의해 생성되면 특정 상황에서 애플리케이션이나 라이브러리가 제어하고자 하는 설정이 있습니다.
Qt 6.5 이전에는 이러한 설정 중 일부는 환경 변수를 통해 제어할 수 있었습니다. 예를 들어 QSG_RHI_DEBUG_LAYER
또는 QSG_RHI_PREFER_SOFTWARE_RENDERER
. 이러한 설정은 여전히 사용 가능하며 이전과 같이 계속 작동합니다. QQuickGraphicsConfiguration은 C++ 세터도 제공합니다.
예를 들어, 다음 main() 함수는 Vulkan 유효성 검사 또는 Direct3D 디버그 레이어를 활성화하도록 지정하면서 QQuickView 을 엽니다:
int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQuickGraphicsConfiguration config; config.setDebugLayer(true); QQuickView *view = new QQuickView; view->setGraphicsConfiguration(config); view->setSource(QUrl::fromLocalFile("myqmlfile.qml")); view->show(); return app.exec(); }
파이프라인 캐시 저장 및 로드
Qt Quick 는 그래픽/컴퓨팅 파이프라인 캐시를 디스크에 저장하고 이후 애플리케이션 실행 시 다시 로드하는 기능을 지원합니다. 파이프라인 캐시에 정확히 무엇이 포함되는지, 조회가 어떻게 작동하는지, 정확히 무엇이 가속화되는지는 모두 런타임에 사용되는 Qt RHI 백엔드와 기본 네이티브 그래픽 API에 따라 달라집니다. 셰이더, 프로그램, 파이프라인 상태 오브젝트 및 해당 캐시 메커니즘에 관해서는 3D API마다 다른 개념을 가지고 있습니다. 여기서의 고수준 파이프라인 캐시 개념은 이 모든 것을 파일에 단일 바이너리 블롭을 저장하고 파일에서 검색하는 것으로 추상화합니다.
참고: 캐시를 디스크에 저장하면 애플리케이션의 후속 실행에서 때때로 상당한 성능 향상을 가져올 수 있습니다.
이전 실행과 동일한 셰이더 프로그램 및/또는 파이프라인 상태가 발생하면 여러 작업을 건너뛸 수 있으므로 셰이더 및 머티리얼 초기화 시간이 단축되어 시작 속도가 빨라지고 렌더링 중 지연 및 '끊김'이 감소하거나 방지될 수 있습니다.
파이프라인 캐시(또는 셰이더/프로그램 바이너리) 검색 및 재로드가 적용되지 않거나 지원되지 않는 그래픽 API로 실행하는 경우 파일을 사용하여 캐시를 저장하고 로드하려고 시도해도 아무런 효과가 없습니다.
참고: 대부분의 경우 검색된 데이터는 그래픽 드라이버(그리고 아마도 정확한 버전)에 의존하고 이에 연결됩니다. Qt는 파이프라인 캐시 파일에 추가 메타데이터를 저장하여 필요한 검사를 자동으로 수행합니다. 파일의 데이터가 런타임에 그래픽 장치 및 드라이버 버전과 일치하지 않는 경우, 그 내용은 애플리케이션에 투명하게 무시됩니다. 따라서 다른 디바이스나 드라이버에서 생성된 캐시를 참조하는 것이 안전합니다.
드라이버 종속성 문제에는 예외가 있는데, 특히 Direct 3D 11에서는 '파이프라인 캐시'가 런타임 HLSL->DXBC 컴파일 결과를 저장하는 데만 사용되므로 장치 및 공급업체에 독립적입니다.
경우에 따라 캐시를 '사전 시딩'하여 애플리케이션의 첫 번째 실행을 개선하는 것이 바람직할 수 있습니다. 이는 이전 실행에서 저장된 캐시 파일을 전송하고 다른 머신이나 디바이스에서 이를 참조함으로써 가능합니다. 이렇게 하면 애플리케이션이나 디바이스는 이전에 캐시 파일을 저장한 실행에서 접했던 셰이더 프로그램/파이프라인을 첫 번째 실행 중에 이미 사용할 수 있게 됩니다. 캐시 파일을 전송하고 배포하는 것은 대상 시스템에서 장치와 그래픽 드라이버가 동일한 경우에만 의미가 있으며, 위에서 설명한 대로 장치 또는 드라이버 버전이 일치하지 않으면 캐시 파일은 무시됩니다(D3D11은 예외).
캐시 콘텐츠가 로드된 후에도 애플리케이션이 이전 실행에서 발생하지 않은 그래픽 및 컴퓨팅 파이프라인을 빌드할 가능성이 있습니다. 이 경우 파이프라인/쉐이더 프로그램이 추가되면서 캐시가 커집니다. 애플리케이션에서 콘텐츠를 저장하도록 선택하면(동일한 파일에 저장할 수도 있음) 이전 파이프라인과 새 파이프라인이 모두 저장됩니다. 매번 실행할 때마다 동일한 파일에서 로드하고 저장하면 발생하는 모든 파이프라인과 셰이더 프로그램을 저장하는 캐시가 계속 커질 수 있습니다.
실제로 Qt 파이프라인 캐시는 다음과 같은 네이티브 그래픽 API 기능에 매핑될 것으로 예상할 수 있습니다:
- Vulkan - VkPipelineCache - 파이프라인 캐시 블롭은 정확한 드라이버에 종속되므로 장치와 드라이버를 안전하게 식별하기 위한 추가 메타데이터와 함께 vkGetPipelineCacheData에서 검색된 블롭을 효과적으로 저장합니다.
- Metal - MTLBinaryArchive - 파이프라인 캐시 저장을 활성화하면 Qt는 발생한 모든 렌더링 및 계산 파이프라인을 MTLBinaryArchive에 저장합니다. 파이프라인 캐시를 저장하면 아카이브에서 검색된 블롭이 디바이스를 식별하기 위한 추가 메타데이터와 함께 저장됩니다. 참고: 현재 일부 하드웨어 및 OS 버전에서 발생하는 다양한 문제로 인해 macOS와 iOS에서는 MTLBinaryArchive를 사용할 수 없습니다.
- OpenGL - 파이프라인의 기본 개념은 없으며, "파이프라인 캐시"는 glGetProgramBinary를 통해 검색된 프로그램 바이너리 모음을 저장합니다. 프로그램 바이너리는 단일 블롭으로 패키징되며, 바이너리가 검색된 장치, 드라이버 및 버전을 식별하는 추가 메타데이터가 포함됩니다. 프로그램 바이너리의 영구 캐싱은 Qt에서 새로운 기능은 아닙니다: Qt 5에는 이미 비슷한 기능이 QOpenGLShaderProgram, addCacheableShaderFromSourceCode() 참조. 사실 이 메커니즘은 OpenGL과 함께 Qt Quick 을 사용할 때 Qt 6에서도 항상 활성화되어 있습니다. 그러나 여기에 제공된 새로운 그래픽 API 독립적인 파이프라인 캐시 추상화를 사용하면 동일한 콘텐츠가 이제 "파이프라인 캐시"에 패키징되므로 Qt 5 시대의 프로그램 바이너리 캐시는 자동으로 비활성화됩니다.
- Direct 3D 11 - 2단계 컴파일(벤더 독립적인 중간 바이트코드가 디바이스별 명령어 집합으로 컴파일되는 경우)을 위한 파이프라인 또는 바이너리 검색의 기본 개념이 없습니다. 드라이버는 일반적으로 해당 수준에서 자체 캐싱 시스템을 사용합니다. 대신 Qt Quick "파이프라인 캐시"는 셰이더에 중간 바이트코드 형식으로 먼저 컴파일해야 하는 HLSL 소스 코드가 포함되어 있는 경우 속도를 높이는 데 사용됩니다. 이는 런타임에 셰이더 코드를 컴파일하는 애플리케이션과 라이브러리에서 상당한 성능 향상을 가져올 수 있는데, 그 이유는 이후 실행에서 발견된 HLSL 셰이더에 대해 바이트코드가 이미 사용 가능한 경우 캐시되지 않은 D3DCompile() 호출을 피할 수 있기 때문입니다. 좋은 예는 Qt Quick 3D, 여기서 머티리얼에 대한 런타임 생성 셰이더는 HLSL 소스 코드를 처리해야 함을 의미합니다. 따라서 Qt Quick 파이프라인 캐시를 저장하고 다시 로드하면 하나 이상의 View3D 항목이 있는 씬에서 상당한 성능 향상을 가져올 수 있습니다. 반면, 대부분의 2D 콘텐츠용 빌트인 셰이더는 빌드 시점에 생성된 DirectX 바이트코드와 함께 제공되므로 캐시를 사용해도 큰 개선 효과를 기대할 수 없습니다( Qt Quick ).
이 모든 것은 Qt Shader Tools 모듈 및 qsb
과 같은 명령줄 도구에서 수행하는 셰이더 처리와는 별개입니다. Vulkan을 예로 들어보겠습니다. 오프라인 또는 빌드 시(qsb 또는 CMake를 통해 직접)에 Vulkan 호환 GLSL 소스 코드를 SPIR-V로 컴파일하면 런타임에 소스 형식에서 컴파일하는 데 드는 비용을 피할 수 있으므로 좋습니다. 그러나 SPIR-V는 벤더에 독립적인 중간 형식입니다. 런타임에 그래픽 또는 컴퓨팅 파이프라인을 구성할 때 중간 형식에서 GPU의 공급업체별 명령어 집합으로 또 한 번의 컴파일이 발생할 수 있습니다(이는 그래픽 파이프라인의 특정 상태와 렌더 타깃에 따라 달라질 수 있음). 파이프라인 캐시는 이 후자의 단계에서 도움을 줍니다.
참고: 많은 그래픽 API 구현은 애플리케이션에 투명하게 자체 영구 디스크 캐시를 사용합니다. 이 경우 Qt Quick 의 파이프라인 캐시 기능을 사용하면 성능이 향상될 가능성이 높지만 이득은 더 적을 수 있습니다.
setPipelineCacheSaveFile() 및 setPipelineCacheLoadFile()을 호출하여 QQuickWindow 또는 QQuickView 에서 파이프라인 캐시를 저장하고 로드할 파일을 제어할 수 있습니다.
파이프라인 캐시의 디스크 저장 활성화가 어떤 영향을 미치는지 알아보려면 환경 변수 QSG_INFO=1
또는 qt.scenegraph.general
및 qt.rhi.general
로깅 카테고리를 통해 가장 중요한 시나리오 및 그래픽 로그를 활성화하세요. QQuickWindow 을 닫으면 다음과 같은 로그 메시지가 표시됩니다:
Total time spent on pipeline creation during the lifetime of the QRhi was 123 ms
이를 통해 창 수명 기간 동안 그래픽 및 컴퓨팅 파이프라인 생성(셰이더 컴파일의 다양한 단계 포함)에 소요된 대략적인 시간을 파악할 수 있습니다.
파이프라인 캐시 파일에서 로드가 활성화된 경우 메시지로 이를 확인할 수 있습니다:
Attempting to seed pipeline cache from 'filename'
마찬가지로 캐시 저장이 성공적으로 활성화되었는지 확인하려면 다음과 같은 메시지가 표시됩니다:
Writing pipeline cache contents to 'filename'
자동 파이프라인 캐시
저장 및 로드를 위한 파일 이름이 제공되지 않으면 자동 파이프라인 캐시 전략이 사용됩니다. 여기에는 시스템의 애플리케이션별 캐시 위치(QStandardPaths::CacheLocation)에 데이터를 저장하는 것이 포함됩니다.
다음 방법 중 하나를 사용하여 이 기능을 비활성화할 수 있습니다:
- 애플리케이션 속성 설정 Qt::AA_DisableShaderDiskCache. (자동 저장을 완전히 비활성화합니다.)
- 환경 변수 QT_DISABLE_SHADER_DISK_CACHE를 0이 아닌 값으로 설정합니다. (자동 저장 기능을 완전히 비활성화합니다.)
- 환경 변수 QSG_RHI_DISABLE_SHADER_DISK_CACHE를 0이 아닌 값으로 설정합니다. (자동 저장 기능을 완전히 비활성화합니다.)
- enable 인수를 false로 설정하여 setAutomaticPiplineCache()를 호출합니다. (자동 저장을 완전히 비활성화합니다.)
- setPipelineCacheLoadFile()를 호출하여 파일 이름을 설정합니다. (자동 저장소에서 로딩만 비활성화하고 대신 지정된 파일을 선호합니다.)
- setPipelineCacheSaveFile()를 호출하여 파일 이름을 설정합니다. (자동 저장소에 대한 쓰기만 비활성화하고 대신 지정한 파일을 선호합니다.)
처음 두 개는 Qt 5.9부터 사용되어온 기존 메커니즘으로 OpenGL 프로그램 바이너리 캐시를 제어하는 데 사용됩니다. 호환성과 친숙함을 위해 Qt 6의 향상된 파이프라인 캐시에도 동일한 속성과 환경 변수가 지원됩니다.
자동 파이프라인 캐시는 애플리케이션당 하나의 파일을 사용하지만 각 RHI 백엔드(그래픽 API)에 대해 다른 파일을 사용합니다. 즉, 애플리케이션의 다음 실행에서 다른 그래픽 API로 변경해도 이전 실행에서 생성된 파이프라인 캐시가 손실되지 않습니다. 그러나 여러 개의 QQuickWindow 인스턴스가 동시에 표시되는 애플리케이션의 경우 자동 캐시는 한 번에 하나의 RHI 개체에서 수집한 데이터만 저장할 수 있으므로 100%의 이점을 얻지 못할 수도 있습니다. (기본값인 threaded
렌더 루프를 사용하면 렌더링이 전용 스레드에서 독립적으로 작동하므로 각 창에는 고유한 RHI가 있습니다.) 여러 개의 창이 있는 애플리케이션에서 디스크 캐시를 최대한 활용하려면 setPipelineCacheSaveFile()를 통해 창별로 파일 이름을 명시적으로 설정하는 것이 좋습니다.
QQuickWindow::setGraphicsConfiguration(), QQuickWindow, QQuickRenderControl 를참조하세요 .
멤버 함수 문서
QQuickGraphicsConfiguration::QQuickGraphicsConfiguration()
고려할 씬 그래프에 대한 추가 설정을 지정하지 않는 기본 QQuickGraphicsConfiguration을 구성합니다.
[noexcept]
QQuickGraphicsConfiguration::~QQuickGraphicsConfiguration()
파괴자.
QByteArrayList QQuickGraphicsConfiguration::deviceExtensions() const
요청된 추가 장치 확장 목록을 반환합니다.
setDeviceExtensions()도 참조하세요 .
[since 6.5]
bool QQuickGraphicsConfiguration::isAutomaticPipelineCacheEnabled() const
자동 파이프라인 캐시가 활성화된 경우 true를 반환합니다.
특정 애플리케이션 속성이나 환경 변수가 설정되어 있지 않는 한 기본적으로 true입니다. 자세한 내용은 The Automatic Pipeline Cache 을 참조하십시오.
이 함수는 Qt 6.5에 도입되었습니다.
setAutomaticPipelineCache()도 참조하십시오 .
bool QQuickGraphicsConfiguration::isDebugLayerEnabled() const
디버그/검증 계층을 활성화할 경우 true를 반환합니다.
기본값은 false입니다.
setDebugLayer()도 참조하세요 .
bool QQuickGraphicsConfiguration::isDebugMarkersEnabled() const
디버그 마커가 활성화된 경우 true를 반환합니다.
기본값은 false입니다.
setDebugMarkers()도 참조하세요 .
bool QQuickGraphicsConfiguration::isDepthBufferEnabledFor2D() const
2D 콘텐츠에 깊이 버퍼 사용이 활성화된 경우 true를 반환합니다.
QSG_NO_DEPTH_BUFFER
환경 변수를 설정하지 않는 한 기본적으로 이 값은 true입니다.
QString QQuickGraphicsConfiguration::pipelineCacheLoadFile() const
파이프라인 캐시를 로드하기 위해 현재 설정된 파일 이름을 반환합니다.
기본적으로 값은 빈 문자열입니다.
setPipelineCacheLoadFile()도 참조하세요 .
QString QQuickGraphicsConfiguration::pipelineCacheSaveFile() const
파이프라인 캐시를 저장하기 위해 현재 설정된 파일 이름을 반환합니다.
기본적으로 값은 빈 문자열입니다.
setPipelineCacheSaveFile()도 참조하세요 .
[static, since 6.1]
QByteArrayList QQuickGraphicsConfiguration::preferredInstanceExtensions()
Qt Quick 가 VkInstance에서 활성화하는 것을 선호하는 벌칸 인스턴스 확장 목록을 반환합니다.
대부분의 경우 Qt Quick 은 QVulkanInstance 을 생성하는 역할을 합니다. 이 함수는 이 경우 관련이 없습니다. 반면에 QQuickRenderControl 을 Vulkan 기반 렌더링과 함께 사용하는 경우 QVulkanInstance 을 생성하고 (화면 밖) QQuickWindow 과 연결하는 것은 애플리케이션의 책임입니다. 이 경우 애플리케이션은 활성화할 인스턴스 확장 목록을 쿼리하여 QVulkanInstance::create()을 호출하기 전에 QVulkanInstance::setExtensions()에 전달해야 합니다.
이 함수는 Qt 6.1에 도입되었습니다.
bool QQuickGraphicsConfiguration::prefersSoftwareDevice() const
소프트웨어 래스터라이저 기반 그래픽 장치의 우선순위가 지정된 경우 true를 반환합니다.
기본값은 false입니다.
setPreferSoftwareDevice()도 참조하세요 .
[since 6.5]
void QQuickGraphicsConfiguration::setAutomaticPipelineCache(bool enable)
enable 을 기준으로 자동 파이프라인 캐시 사용을 변경합니다.
특정 애플리케이션 속성이나 환경 변수가 설정되어 있지 않는 한 기본값은 true입니다. 자세한 내용은 The Automatic Pipeline Cache 을 참조하십시오.
이 함수는 Qt 6.5에 도입되었습니다.
isAutomaticPipelineCacheEnabled()도 참조하십시오 .
[since 6.5]
void QQuickGraphicsConfiguration::setDebugLayer(bool enable)
그래픽 API 구현의 디버그 또는 유효성 검사 레이어(사용 가능한 경우)를 활성화합니다.
실제로 이 기능은 필요한 지원(유효성 검사 레이어, Windows SDK)이 설치되어 있고 런타임에 사용 가능하다는 가정 하에 Vulkan 및 Direct 3D 11에서 지원됩니다. enable 이 참이면 Qt는 VkInstance에서 표준 유효성 검사 레이어를 활성화하거나 그래픽 장치에서 D3D11_CREATE_DEVICE_DEBUG
을 설정하려고 시도합니다.
macOS의 Metal의 경우 애플리케이션을 시작하기 전에 환경 변수 METAL_DEVICE_WRAPPER_TYPE=1
를 대신 설정합니다.
enable 을 참으로 설정한 상태에서 이 함수를 호출하는 것은 환경 변수 QSG_RHI_DEBUG_LAYER
를 0이 아닌 값으로 설정하는 것과 같습니다.
기본값은 false입니다.
참고: 디버그 또는 유효성 검사 계층을 활성화하면 성능에 별다른 영향을 미치지 않을 수 있습니다. 이 플래그를 활성화한 상태로 애플리케이션을 프로덕션 환경으로 배포하는 것은 권장하지 않습니다.
참고: 기본 그래픽 API의 설계 차이로 인해 이 설정은 QQuickWindow 에 각각 QQuickGraphicsConfiguration 이 있더라도 항상QQuickWindow 설정이 될 수는 없습니다. 특히 Vulkan의 경우 인스턴스 객체(VkInstance)는 한 번만 생성된 후 애플리케이션의 모든 창에서 사용됩니다. 따라서 유효성 검사 계층을 활성화하면 모든 창에 영향을 미칩니다. 즉, 다른 창이 이미 렌더링을 시작한 후에만 표시되는 창을 통해 유효성 검사를 활성화하려고 시도해도 Vulkan에서는 효과가 없습니다. D3D11과 같은 다른 API는 디버그 레이어 개념을 디바이스별(ID3D11Device) 설정으로 노출하므로 실제 창별로 제어됩니다(시나리오 그래프 렌더 루프가 각각 전용 그래픽 디바이스/컨텍스트를 사용한다고 가정하면 QQuickWindow).
이 함수는 Qt 6.5에 도입되었습니다.
isDebugLayerEnabled()도 참조하십시오 .
[since 6.5]
void QQuickGraphicsConfiguration::setDebugMarkers(bool enable)
해당되는 경우 enable 는 그래픽 명령 스트림에 디버그 마커와 객체 이름을 삽입하는 것을 제어합니다.
Qt Quick 3D 와 같은 일부 프레임워크에는 생성하는 그래픽 객체(버퍼, 텍스처)에 이름을 주석으로 추가하고 명령 버퍼에서 렌더링 패스의 시작과 끝을 표시하는 기능이 있습니다. 이러한 주석은 RenderDoc 또는 XCode와 같은 도구로 만든 프레임 캡처에서 볼 수 있습니다.
이 기능이 지원될 것으로 예상되는 그래픽 API는 Vulkan(VK_EXT_debug_utils를 사용할 수 있는 경우), Direct 3D 11 및 Metal입니다.
enable 을 true로 설정하여 이 함수를 호출하는 것은 환경 변수 QSG_RHI_PROFILE
를 0이 아닌 값으로 설정하는 것과 같습니다.
기본값은 false입니다.
참고: 디버그 마커를 활성화하면 성능에 영향을 미칠 수 있습니다. 이 플래그를 활성화한 상태로 애플리케이션을 프로덕션 환경으로 배포하는 것은 권장하지 않습니다.
이 기능은 Qt 6.5에 도입되었습니다.
isDebugMarkersEnabled()도 참조하세요 .
void QQuickGraphicsConfiguration::setDepthBufferFor2D(bool enable)
2D 콘텐츠의 뎁스 버퍼 사용을 enable 로 설정합니다. 비활성화하면 Qt Quick 씬 그래프가 뎁스 버퍼에 기록되지 않습니다.
QSG_NO_DEPTH_BUFFER
환경 변수를 설정하지 않는 한 기본값은 true입니다.
기본값인 true는 대부분의 씬에 가장 적합한 설정입니다. 뎁스 버퍼 사용을 비활성화하면 씬 그래프의 일괄 처리 효율성이 떨어집니다.
그러나 2D 콘텐츠의 뎁스 버퍼 쓰기를 허용하는 것이 이상적이지 않은 경우도 있습니다. Qt Quick 3D 2D 씬 위에 3D 씬을 '오버레이'하고 View3D 을 통해 renderMode 을 Overlay
로 설정하여 렌더링한다고 가정해 보겠습니다. 이 경우 2D 콘텐츠로 뎁스 버퍼를 채우면 예기치 않은 결과가 발생할 수 있습니다. 2D 씬 그래프 렌더러가 깊이 값을 생성하고 처리하는 방식이 3D 씬의 작동 방식과 반드시 호환되는 것은 아니기 때문입니다. 이로 인해 뎁스 값 충돌, 충돌 및 예기치 않은 뎁스 테스트 실패가 발생할 수 있습니다. 따라서 enable 을 false로 설정한 상태에서 이 함수를 호출하고 QQuickWindow 에서 2D 콘텐츠에 대한 뎁스 버퍼 쓰기를 비활성화하는 것이 가장 확실한 방법입니다.
참고: 이 플래그는 QSG_NO_DEPTH_BUFFER
환경 변수를 설정하는 것과 완전히 동일하지는 않습니다. 이 플래그는 뎁스 스텐실 버퍼의 존재 여부를 제어하지 않습니다. 오히려 렌더링 파이프라인과 관련이 있습니다. 뎁스/스텐실 어태치먼트를 전혀 사용하지 않으려면 QSG_NO_DEPTH_BUFFER
및 QSG_NO_STENCIL_BUFFER
을 설정합니다. 그러나 3D 콘텐츠에는 뎁스 버퍼가 필요하므로 이러한 QQuickWindow 와 그 안의 모든 아이템 레이어는 특정 작동 모드에서 View3D 와 같은 아이템과 호환되지 않을 수 있습니다. 이 함수를 호출하는 것은 항상 안전하지만 깊이 버퍼와 같은 리소스가 활발하게 사용되지 않는데도 생성될 수 있습니다.
void QQuickGraphicsConfiguration::setDeviceExtensions(const QByteArrayList &extensions)
그래픽 장치에서 활성화할 추가 extensions 목록을 설정합니다(예: VkDevice
).
이 개념이 적용되지 않는 그래픽 API로 렌더링하는 경우 extensions 은 무시됩니다.
참고: 이 목록은 추가적인 추가 확장을 지정합니다. Qt Quick 은 항상 씬 그래프에 필요한 확장을 활성화합니다.
deviceExtensions()도 참조하세요 .
[since 6.5]
void QQuickGraphicsConfiguration::setPipelineCacheLoadFile(const QString &filename)
QQuickWindow 에서 그래픽/컴퓨팅 파이프라인 캐시의 초기 콘텐츠를 로드할 것으로 예상되는 filename 을 설정합니다. 기본값은 비어 있으므로 파이프라인 캐시 로딩이 비활성화됩니다.
파이프라인 캐시에 대한 자세한 내용은 Pipeline Cache Save and Load 을 참조하세요.
파이프라인 캐시를 지속적으로 저장하면 비용이 많이 드는 셰이더 컴파일 및 파이프라인 구성 단계를 피할 수 있으므로 향후 애플리케이션 실행 시 성능이 향상될 수 있습니다.
파일 콘텐츠의 로딩이 언제 발생하는지는 정의되어 있지 않지만, QQuickWindow 의 시나리오 초기화 중 어느 시점에 발생하므로 이 함수를 호출한 후에도 파일이 계속 존재해야 합니다. QQuickGraphicsConfiguration 은 파일 이름만 저장하고 실제 I/O 및 그래픽 작업을 자체적으로 수행할 수 없습니다. 실제 작업은 나중에 다른 스레드에서 이루어집니다.
파이프라인 캐시(또는 셰이더/프로그램 바이너리)를 검색하고 다시 로드하는 것이 적용되지 않거나 지원되지 않는 그래픽 API로 실행하는 경우 이 함수를 호출해도 아무런 효과가 없습니다.
이 함수를 호출하는 것은 환경 변수 QSG_RHI_PIPELINE_CACHE_LOAD
를 filename 로 설정하는 것과 거의 동일하지만 한 가지 중요한 차이점이 있습니다. 이 함수는 연결된 QQuickWindow 에 대해서만 파이프라인 캐시 저장소를 제어합니다. 따라서 QQuickWindow 또는 QQuickView 인스턴스가 여러 개 있는 애플리케이션은 각 창 전용 파일을 통해 캐시 콘텐츠를 저장하고 나중에 다시 로드할 수 있습니다. 환경 변수는 이를 허용하지 않습니다.
참고: 파일의 데이터가 실행 시점에 그래픽 장치 및 드라이버 버전과 일치하지 않으면 해당 내용은 애플리케이션에 투명하게 무시됩니다. 이는 여러 그래픽 API에 적용되며, 필요한 검사는 Qt에서 처리합니다. 예외가 있는데, 특히 다이렉트 3D 11은 "파이프라인 캐시"가 런타임 HLSL->DXBC 컴파일 결과를 저장하는 데만 사용되므로 디바이스 및 벤더에 독립적입니다.
이 기능은 Qt 6.5에 도입되었습니다.
pipelineCacheLoadFile() 및 setPipelineCacheSaveFile()도 참조하십시오 .
[since 6.5]
void QQuickGraphicsConfiguration::setPipelineCacheSaveFile(const QString &filename)
QQuickWindow 에 그래픽/컴퓨팅 파이프라인 캐시 콘텐츠를 저장할 filename 을 설정합니다. 기본값은 비어 있으므로 파이프라인 캐시 로딩이 비활성화됩니다.
파이프라인 캐시에 대한 설명은 Pipeline Cache Save and Load 을 참조하세요.
파이프라인 캐시를 지속적으로 저장하면 비용이 많이 드는 셰이더 컴파일 및 파이프라인 구성 단계를 피할 수 있으므로 향후 애플리케이션 실행 시 성능이 향상될 수 있습니다.
파일 쓰기가 발생하는 시기와 시기는 정의되어 있지 않습니다. 창을 닫아 시나리오를 해체할 때 어느 시점에 발생할 가능성이 높습니다. 따라서 애플리케이션은 QQuickWindow 이 완전히 소멸될 때까지 파일의 가용성을 가정해서는 안 됩니다. QQuickGraphicsConfiguration 은 파일 이름만 저장하고 실제 I/O 및 그래픽 작업은 자체적으로 수행하지 않습니다.
파이프라인 캐시(또는 셰이더/프로그램 바이너리) 검색이 적용되지 않거나 지원되지 않는 그래픽 API로 실행하는 경우 이 함수를 호출해도 아무런 효과가 없습니다.
이 함수를 호출하는 것은 환경 변수 QSG_RHI_PIPELINE_CACHE_SAVE
를 filename 로 설정하는 것과 거의 동일하지만, 한 가지 중요한 차이점이 있습니다. 이 함수는 연결된 QQuickWindow 에 대해서만 파이프라인 캐시 저장소를 제어한다는 점입니다. 따라서 QQuickWindow 또는 QQuickView 인스턴스가 여러 개 있는 애플리케이션은 각 창 전용 파일을 통해 캐시 콘텐츠를 저장하고 나중에 다시 로드할 수 있습니다. 환경 변수는 이를 허용하지 않습니다.
이 기능은 Qt 6.5에 도입되었습니다.
pipelineCacheSaveFile(), pipelineCacheLoadFile() 및 setPipelineCacheSaveFile()도 참조하세요 .
[since 6.5]
void QQuickGraphicsConfiguration::setPreferSoftwareDevice(bool enable)
소프트웨어 기반 래스터화를 사용하는 어댑터 또는 물리적 디바이스를 선택하도록 요청합니다. 기본 API가 어댑터 열거(예: Direct 3D 또는 Vulkan)를 지원하는 경우에만 적용되며, 그렇지 않은 경우에는 무시됩니다.
그래픽 API 구현에 이러한 그래픽 어댑터나 물리적 장치가 없는 경우 요청은 무시됩니다. Direct 3D를 사용하면 WARP 기반 래스터라이저를 항상 사용할 수 있다고 예상할 수 있습니다. 벌칸의 경우 이 플래그는 Mesa의 lavapipe
또는 VK_PHYSICAL_DEVICE_TYPE_CPU
을 보고하는 다른 물리적 장치를 사용할 수 있는 경우에만 영향을 미칩니다.
enable 을 참으로 설정한 상태에서 이 함수를 호출하는 것은 환경 변수 QSG_RHI_PREFER_SOFTWARE_RENDERER
를 0이 아닌 값으로 설정하는 것과 같습니다.
기본값은 false입니다.
이 함수는 Qt 6.5에 도입되었습니다.
prefersSoftwareDevice()도 참조하십시오 .
[since 6.6]
void QQuickGraphicsConfiguration::setTimestamps(bool enable)
이 옵션을 활성화하면 GPU 타이밍 데이터가 지원되는 플랫폼 및 3D API의 명령 버퍼에서 수집됩니다. 이 데이터는 QSG_RENDER_TIMING
환경 변수 또는 qt.scenegraph.time.renderloop
과 같은 로깅 카테고리를 통해 활성화할 수 있는 렌더러 로그에 인쇄되며, Qt Quick 3D 의 DebugView 항목과 같은 다른 모듈에도 표시될 수 있습니다.
기본 그래픽 API에 따라 데이터를 수집하려면 명령 스트림에 타임스탬프 쿼리를 삽입하는 등의 추가 작업이 필요할 수 있으므로 기본적으로 이 기능은 비활성화되어 있습니다. 활성화하려면 enable 을 참으로 설정한 상태에서 이 함수를 호출하거나 QSG_RHI_PROFILE
환경 변수를 0이 아닌 값으로 설정하세요.
이 기능이 지원될 것으로 예상되는 그래픽 API는 Direct 3D 11, Direct 3D 12, Vulkan(기본 Vulkan 구현이 타임스탬프 쿼리를 지원하는 경우), Metal 및 버전 3.3 이상의 코어 또는 호환성 프로필 컨텍스트가 있는 OpenGL입니다. OpenGL ES에서는 타임스탬프가 지원되지 않습니다.
이 기능은 Qt 6.6에 도입되었습니다.
timestampsEnabled() 및 setDebugMarkers()도 참조하세요 .
[since 6.6]
bool QQuickGraphicsConfiguration::timestampsEnabled() const
GPU 타이밍 수집이 활성화된 경우 true를 반환합니다.
기본값은 false입니다.
이 함수는 Qt 6.6에 도입되었습니다.
setTimestamps()도 참조하십시오 .
© 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.