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 클래스는 Vulkan과 같은 기본 그래픽 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 엔진과 통합할 때, 애플리케이션은 어떤 장치 확장을 활성화할지 같은 세부 사항에 대해 자체 설정 집합을 지정하고자 할 것입니다.
이 클래스는 바로 이러한 기능을 제공합니다. 예를 들어, Vulkan을 사용하거나 해당 개념이 적용 가능한 그래픽 API를 사용할 때, 이 클래스를 통해 지정된 장치 확장 기능 목록이 씬 그래프에 반영됩니다. 특정 개념이 적용되지 않는 경우, 관련 설정은 단순히 무시됩니다.
이 범주에 속하는 함수의 예로는 ` setDeviceExtensions()` 및 ` preferredInstanceExtensions()`이 있습니다. 후자는 애플리케이션이 자체 ` QVulkanInstance `을 관리하고, 이를 ` QWindow::setVulkanInstance()`을 통해 ` QQuickWindow `과 연결할 때 유용합니다.
Qt Quick 씬 그래프 렌더러 구성
또 다른 유형의 설정은 씬 그래프의 렌더러와 관련이 있습니다. 경우에 따라 애플리케이션은 2D 콘텐츠를 렌더링할 때 뎁스 버퍼를 사용하는 것과 같은 특정 동작을 제어하고자 할 수 있습니다. Qt 5에서는 이러한 설정을 전혀 제어할 수 없거나 환경 변수를 통해 관리해야 했습니다. Qt 6에서는 QQuickGraphicsConfiguration이 이러한 설정을 위한 새로운 관리 지점을 제공하며, 해당되는 경우 기존 환경 변수에 대한 지원도 유지합니다.
이 범주의 예로는 ` setDepthBufferFor2D()`가 있습니다.
그래픽 장치 구성
QQuickWindow 를 초기화할 때 Qt가 그래픽 인스턴스 및 장치 객체(예: Vulkan의 VkInstance 및 VkDevice, Direct 3D의 ID3D11Device 등)를 생성할 때, 특정 상황에서 애플리케이션이나 라이브러리가 제어하고자 하는 설정들이 있습니다.
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 는 그래픽/컴퓨트 파이프라인 캐시를 디스크에 저장하고, 이후 애플리케이션 실행 시 이를 다시 불러오는 기능을 지원합니다. 파이프라인 캐시에 정확히 무엇이 포함되는지, 조회(lookup)가 어떻게 이루어지는지, 그리고 정확히 무엇이 가속화되는지는 모두 Qt RHI 백엔드와 런타임에 사용되는 기본 네이티브 그래픽 API에 따라 달라집니다. 3D API마다 셰이더, 프로그램, 파이프라인 상태 객체 및 이에 상응하는 캐시 메커니즘에 대한 개념이 다릅니다. 여기에서 설명하는 고수준 파이프라인 캐시 개념은 이 모든 것을 파일로 단일 바이너리 블롭을 저장하고 파일에서 불러오는 과정으로 추상화합니다.
참고: 캐시를 디스크에저장하면 애플리케이션의 후속 실행 시 성능이 향상될 수 있으며, 경우에 따라 그 효과가 상당할 수도 있습니다.
이전 실행과 동일한 셰이더 프로그램 및/또는 파이프라인 상태가 발견되면 여러 작업이 건너뛸 가능성이 높아, 셰이더 및 머티리얼 초기화 시간이 단축됩니다. 이는 시작 속도가 빨라지고 렌더링 중 발생하는 지연 및 "버벅임"이 줄어들거나 방지될 수 있음을 의미합니다.
파이프라인 캐시(또는 셰이더/프로그램 바이너리)를 불러오거나 다시 로드하는 것이 적용되지 않거나 지원되지 않는 그래픽 API로 실행하는 경우, 파일을 사용하여 캐시를 저장하거나 불러오려고 해도 아무런 효과가 없습니다.
참고: 대부분의 경우, 검색된 데이터는 그래픽 드라이버(그리고 경우에 따라 정확한 드라이버 버전)에 의존하며 이와 밀접하게 연결되어 있습니다. Qt는 파이프라인 캐시 파일에 추가 메타데이터를 저장함으로써 필요한 검사를 자동으로 수행합니다. 파일의 데이터가 런타임 시점의 그래픽 장치 및 드라이버 버전과 일치하지 않는 경우, 해당 내용은 애플리케이션에 노출되지 않은 채 투명하게 무시됩니다. 따라서 다른 장치나 드라이버에서 생성된 캐시를 참조해도 안전합니다.
드라이버 의존성 문제에는 예외가 있는데, 가장 대표적인 예가 Direct 3D 11입니다. 이 경우 “파이프라인 캐시”는 런타임 HLSL→DXBC 컴파일 결과만 저장하는 데 사용되므로 장치 및 벤더에 독립적입니다.
경우에 따라 캐시를 "사전 초기화(pre-seeding)"하여 애플리케이션의 첫 실행 성능을 향상시키고자 할 수 있습니다. 이는 이전 실행에서 저장된 캐시 파일을 함께 배포하고, 다른 컴퓨터나 장치에서 이를 참조함으로써 가능합니다. 이렇게 하면 애플리케이션이나 기기는 캐시 파일을 저장했던 이전 실행에서 이미 처리된 셰이더 프로그램/파이프라인을 첫 실행 시점에 바로 사용할 수 있게 됩니다. 캐시 파일을 전달하고 배포하는 것은 대상 시스템의 장치와 그래픽 드라이버가 동일한 경우에만 의미가 있습니다. 그렇지 않으면 위에서 설명한 바와 같이(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단계 컴파일(벤더에 독립적인 중간 바이트코드가 장치별 명령어 세트로 컴파일되는 단계)을 위한 바이너리 검색에 대한 기본 개념은 없습니다. 드라이버는 일반적으로 해당 수준에서 자체 캐싱 시스템을 사용합니다. 대신, 셰이더에 HLSL 소스 코드가 포함되어 있어 먼저 중간 바이트코드 형식으로 컴파일되어야 하는 경우, Qt Quick "파이프라인 캐시"가 사용되어 속도를 높입니다. 이는 런타임에 셰이더 코드를 구성하는 애플리케이션과 라이브러리에서 상당한 성능 향상을 가져올 수 있습니다. 왜냐하면 이후 실행 시, 해당 HLSL 셰이더에 대한 바이트코드가 이미 준비되어 있다면 잠재적으로 비용이 많이 들고 캐시에 저장되지 않은 D3DCompile() 호출을 피할 수 있기 때문입니다. 좋은 예로 Qt Quick 3D 을 들 수 있는데, 여기에서 머티리얼을 위한 런타임 생성 셰이더는 HLSL 소스 코드를 처리해야 함을 의미합니다. 따라서 Qt Quick 파이프라인 캐시를 저장하고 다시 불러오면, 하나 이상의 View3D 항목이 포함된 장면에서 상당한 성능 향상을 가져올 수 있습니다. 반대의 예로는 Qt Quick 자체가 있습니다. 2D 콘텐츠용 내장 셰이더 대부분은 빌드 시점에 생성된 DirectX 바이트코드로 제공되므로, 캐시를 사용해도 큰 성능 향상을 기대하기 어렵습니다.
이 모든 것은 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에서 활성화되기를 선호하는 Vulkan 인스턴스 확장 기능 목록을 반환합니다.
대부분의 경우 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 구현의 디버그 또는 유효성 검사 계층을 활성화합니다.
실제로는 Vulkan 및 Direct 3D 11에서 이 기능이 지원되며, 필요한 지원 요소(검증 레이어, Windows SDK)가 설치되어 있고 런타임 시 사용할 수 있는 경우에 한합니다. enable 가 true인 경우, Qt는 VkInstance에서 표준 검증 레이어를 활성화하거나 그래픽 장치에서 D3D11_CREATE_DEVICE_DEBUG 를 설정하려고 시도합니다.
macOS의 Metal의 경우, 애플리케이션을 실행하기 전에 METAL_DEVICE_WRAPPER_TYPE=1 환경 변수를 설정해야 합니다.
enable 가 true로 설정된 상태에서 이 함수를 호출하는 것은 환경 변수 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 콘텐츠가 깊이 버퍼에 쓰도록 허용하는 것이 이상적이지 않은 경우도 있습니다. renderMode 가 Overlay 로 설정된 View3D 를 사용하여 Qt Quick 3D 를 통해 렌더링된 3D 씬을 2D 씬 위에 "오버레이"로 생각해보세요. 이 경우, 깊이 버퍼가 2D 콘텐츠로 채워지면 예상치 못한 결과가 발생할 수 있습니다. 이는 2D 씬 그래프 렌더러가 깊이 값을 생성하고 처리하는 방식이 3D 씬의 작동 방식과 반드시 호환되는 것은 아니기 때문입니다. 이로 인해 깊이 값 충돌, 콜리전, 예상치 못한 깊이 테스트 실패가 발생할 수 있습니다. 따라서, 여기서 안정적인 접근 방식은 ` enable `를 `false`로 설정하고, ` QQuickWindow`에서 2D 콘텐츠에 대한 깊이 버퍼 쓰기를 비활성화한 상태로 이 함수를 호출하는 것입니다.
참고: 이 플래그는 QSG_NO_DEPTH_BUFFER 환경 변수를 설정하는 것과 완전히 동일하지 않습니다. 이 플래그는 뎁스-스텐실 버퍼의 존재 여부를 제어하지 않습니다. 오히려 렌더링 파이프라인과 관련이 있습니다. 뎁스/스텐실 어태치먼트를 아예 사용하지 않도록 강제하려면 QSG_NO_DEPTH_BUFFER 및 QSG_NO_STENCIL_BUFFER 를 설정하십시오. 다만, 이러한 QQuickWindow 및 그 안에 포함된 모든 Item 레이어는 3D 콘텐츠에 깊이 버퍼가 필요하기 때문에, 특정 작동 모드에서 View3D 와 같은 항목과 호환되지 않을 수 있다는 점에 유의하십시오. 이 함수를 호출하는 것은 항상 안전하지만, 깊이 버퍼와 같은 리소스가 실제로 사용되지 않더라도 생성될 수 있음을 의미합니다.
void QQuickGraphicsConfiguration::setDeviceExtensions(const QByteArrayList &extensions)
그래픽 장치(예: VkDevice)에서 활성화할 추가 extensions 목록을 설정합니다.
이 개념이 적용되지 않는 그래픽 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에서 처리합니다. 예외도 있는데, 특히 Direct 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 을 참조하십시오.
파이프라인 캐시를 영구적으로 저장하면, 비용이 많이 드는 셰이더 컴파일 및 파이프라인 구축 단계를 피할 수 있으므로 향후 애플리케이션 실행 시 성능이 향상될 수 있습니다.
파일 쓰기 작업이 발생하는 시점은 정의되어 있지 않습니다. 창을 닫아 씬그래프(scenegraph)를 해제하는 과정에서 어느 시점에 발생할 가능성이 높습니다. 따라서 애플리케이션은 QQuickWindow 가 완전히 해제될 때까지 해당 파일의 가용성을 가정해서는 안 됩니다. QQuickGraphicsConfiguration 는 파일 이름만 저장할 뿐, 자체적으로 실제 I/O 및 그래픽 작업을 수행하지 않습니다.
파이프라인 캐시(또는 셰이더/프로그램 바이너리)를 가져오는 것이 적용되지 않거나 지원되지 않는 그래픽 API에서 실행할 경우, 이 함수를 호출해도 아무런 효과가 없습니다.
이 함수를 호출하는 것은 환경 변수 QSG_RHI_PIPELINE_CACHE_SAVE 를 filename 로 설정하는 것과 대체로 동일하지만, 한 가지 중요한 차이점이 있습니다. 이 함수는 연관된 QQuickWindow 에 대해서만 파이프라인 캐시 저장을 제어합니다. 따라서 여러 개의 QQuickWindow 또는 QQuickView 인스턴스를 가진 애플리케이션은 각 창에 전용된 파일을 통해 캐시 내용을 저장하고 나중에 다시 불러올 수 있습니다. 환경 변수로는 이를 허용하지 않습니다.
이 함수는 Qt 6.5에서 도입되었습니다.
pipelineCacheLoadFile() 및 pipelineCacheSaveFile()도 참조하십시오 .
[since 6.5] void QQuickGraphicsConfiguration::setPreferSoftwareDevice(bool enable)
소프트웨어 기반 래스터화를 사용하는 어댑터 또는 물리적 장치를 선택하도록 요청합니다. 이 플래그는 기본 API가 어댑터 열거를 지원하는 경우(예: Direct 3D 또는 Vulkan)에만 적용되며, 그렇지 않은 경우에는 무시됩니다.
그래픽 API 구현에 해당 그래픽 어댑터나 물리 장치가 없는 경우, 이 요청은 무시됩니다. Direct 3D의 경우 WARP 기반 래스터라이저가 항상 사용 가능할 것으로 예상됩니다. Vulkan의 경우, 이 플래그는 Mesa의 lavapipe 또는 VK_PHYSICAL_DEVICE_TYPE_CPU 를 보고하는 다른 물리 장치가 사용 가능한 경우에만 효과가 있습니다.
enable 를 true로 설정하고 이 함수를 호출하는 것은 환경 변수 QSG_RHI_PREFER_SOFTWARE_RENDERER 를 0이 아닌 값으로 설정하는 것과 동일합니다.
기본값은 false입니다.
이 함수는 Qt 6.5에서 도입되었습니다.
prefersSoftwareDevice()도 참조하십시오 .
[since 6.6] void QQuickGraphicsConfiguration::setTimestamps(bool enable)
이 기능이 활성화되면, 이를 지원하는 플랫폼 및 3D API에서 명령어 버퍼를 통해 GPU 타이밍 데이터가 수집됩니다. 이 데이터는 QSG_RENDER_TIMING 환경 변수나 qt.scenegraph.time.renderloop 와 같은 로깅 범주를 통해 활성화할 수 있는 렌더러 로그에 출력되며, Qt Quick 3D 의 ‘ DebugView ’ 항목과 같은 다른 모듈에서도 확인할 수 있습니다.
기본적으로 이 기능은 비활성화되어 있습니다. 이는 데이터 수집 과정에서 기본 그래픽 API에 따라 명령 스트림에 타임스탬프 쿼리를 삽입하는 등의 추가 작업이 필요할 수 있기 때문입니다. 이 기능을 활성화하려면 enable 을 true로 설정하고 이 함수를 호출하거나, 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()도 참조하십시오 .
© 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.