이 페이지에서

QRhiVulkanInitParams Struct

Vulkan 전용 초기화 매개변수. 더 보기...

헤더: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
다음부터: Qt 6.6
상속: QRhiInitParams

공개 변수

QByteArrayList deviceExtensions
QVulkanInstance *inst
QWindow *window

정적 공용 멤버

상세 설명

참고: 이 API는 호환성 보장이 제한된 RHI API입니다. 자세한 내용은 QRhi 를 참조하십시오.

Vulkan 기반의 QRhi 는 최소한 유효한 QVulkanInstance 가 필요합니다. 이 객체가 사용 가능하고 초기화되었는지 확인하는 것은 사용자의 책임입니다. 이는 일반적으로 다음과 같이 main()에서 수행됩니다.

int main(int argc, char **argv)
{
    ...

    QVulkanInstance inst;
    inst.setLayers({ "VK_LAYER_KHRONOS_validation" }); // for debugging only, not for release builds
    inst.setExtensions(QRhiVulkanInitParams::preferredInstanceExtensions());
    if (!inst.create())
        qFatal("Vulkan not available");

    ...
}

이 예제는 Vulkan 유효성 검사 레이어가 사용 가능한 경우 이를 활성화하고, QRhi 가 권장하는 인스턴스 수준 확장 기능(예: VK_KHR_get_physical_device_properties2)도 런타임 시 Vulkan 구현에서 지원되는 한 활성화합니다.

전자는 선택 사항이며, 개발 단계에서 유용합니다 QVulkanInstance 는 메시지 및 경고를 qDebug 로 편리하게 리디렉션합니다. 그러나 프로덕션 빌드에서는 이를 활성화하지 마십시오. 후자는 강력히 권장되며, 특정 기능(예: QRhi::CustomInstanceStepRate)을 정상적으로 작동시키기 위해 중요합니다.

이 작업이 완료되면, 인스턴스와 표면 유형이 QSurface::VulkanSurface 로 설정된 QWindow 를 전달하여 Vulkan 기반 QRhi 를 생성할 수 있습니다:

QRhiVulkanInitParams params;
params.inst = vulkanInstance;
params.window = window;
rhi = QRhi::create(QRhi::Vulkan, &params);

창은 선택 사항이며 생략할 수 있습니다. 그러나 이 경우 그래픽 큐를 선택할 때 렌더링이 지원되는지 확인할 방법이 없으므로 권장하지 않습니다.

참고: 창이 지정된경우에도 , 모든 QWindow::surfaceType()의 값이 QSurface::VulkanSurface 로 설정되어 있다면 다른 창을 위한 QRhiSwapChain 객체를 생성할 수 있습니다.

Vulkan 장치에서 추가 확장 기능을 활성화하려면 deviceExtensions 에 해당 확장 기능을 나열하십시오. 이는 네이티브 Vulkan 렌더링 코드와 통합할 때 관련이 있을 수 있습니다.

QVulkanInstance 을 초기화하기 전에 정적 함수 preferredInstanceExtensions()을 호출하여 백엔드가 원하는 인스턴스 확장 기능 목록을 조회해야 합니다. 반환된 목록은 지원되지 않는 확장 기능이 자동으로 필터링되므로, 그대로 QVulkanInstance::setExtensions()에 안전하게 전달할 수 있습니다. 이 과정을 거치지 않을 경우, 시스템의 Vulkan 구현체가 관련 기능을 지원하더라도 QRhi::CustomInstanceStepRate 와 같은 특정 기능이 지원되지 않는 것으로 보고될 수 있습니다.

모든 기능을 사용하려면, 가능한 경우 QVulkanInstance 에서 API 1.1을 활성화해야 합니다. 즉, QVulkanInstance::supportedApiVersion()이 최소 Vulkan 1.1을 지원한다고 보고할 때마다 1.1 이상의 값을 사용하여 QVulkanInstance::setApiVersion()를 호출해야 합니다. 이를 수행하지 않을 경우, 시스템의 Vulkan 구현체가 Vulkan 1.1 이상을 지원하더라도 QRhi::RenderTo3DTextureSlice 과 같은 특정 기능이 지원되지 않는 것으로 보고될 수 있습니다.

기존 Vulkan 장치와 연동하기

다른 그래픽 엔진과 상호 운용할 때, 동일한 Vulkan 장치를 사용하는 ` QRhi ` 인스턴스를 가져와야 할 수 있습니다. 이는 ` QRhiVulkanNativeHandles `에 대한 포인터를 ` QRhi::create()`에 전달하여 달성할 수 있습니다.

physical_device는 항상 null이 아닌 값으로 설정되어야 합니다. 단순히 physical_device만 지정하고 나머지 VkDevice 및 큐 생성은 QRhi 에 맡기려는 경우, 구조체 내의 다른 멤버는 채울 필요가 없습니다. 예를 들어, OpenXR을 사용할 때와 같은 경우입니다.

기존의 VkDevice 를 채택하려면 device 필드도 null이 아닌 값으로 설정해야 합니다. 또한 그래픽 큐 패밀리 인덱스가 필수입니다. 큐 인덱스는 기본값인 0이 대개 적합하므로 선택 사항입니다.

선택적으로 기존 명령 풀 객체를 지정할 수도 있습니다. 또한 선택적으로 vmemAllocator를 사용하여 두 개의 QRhi 인스턴스 간에 동일한 Vulkan 메모리 할당기를 공유할 수 있습니다.

QRhi 는 어떤 외부 객체에 대해서도 소유권을 가지지 않습니다.

애플리케이션은 정적 함수 ` preferredExtensionsForImportedDevice()`를 호출하여 필요한 디바이스 확장 기능 목록을 조회하고, `VkDevice`에서 해당 기능을 활성화하는 것이 좋습니다. 그렇지 않으면 특정 ` QRhi ` 기능을 사용할 수 없을 수 있습니다.

멤버 함수 문서

[static] QByteArrayList QRhiVulkanInitParams::preferredExtensionsForImportedDevice()

외부에서 생성된 ` VkDevice ` 객체를 사용하여 Vulkan 기반의 ` QRhi `을 생성할 때, ` VkDevice `에서 활성화될 것으로 예상되는 장치 확장 기능 목록을 반환합니다.

[static] QByteArrayList QRhiVulkanInitParams::preferredInstanceExtensions()

Vulkan 기반의 QRhi 에 사용되는 QVulkanInstance 에서 활성화될 것으로 예상되는 인스턴스 확장 기능 목록을 반환합니다.

지원되지 않는 확장 기능은 자동으로 필터링되므로, 반환된 목록은 그대로 QVulkanInstance::setExtensions()에 안전하게 전달할 수 있습니다.

멤버 변수 설명서

QByteArrayList QRhiVulkanInitParams::deviceExtensions

선택 사항이며, 기본값은 비어 있습니다. 활성화할 Vulkan 장치 확장 기능 목록입니다. 지원되지 않는 확장 기능은 문제 없이 무시됩니다.

QVulkanInstance *QRhiVulkanInitParams::inst

이미 성공적으로 완료된 ‘ QVulkanInstance ’ 프로젝트( created)는 필수 사항입니다.

QWindow *QRhiVulkanInitParams::window

선택 사항이지만, QWindow 을 대상으로 할 때는 권장됩니다.

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