QRhiVulkanInitParams Struct

벌칸 특정 초기화 매개변수. 더 보기...

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

공용 변수

QByteArrayList deviceExtensions
QVulkanInstance *inst
QWindow *window

정적 공용 멤버

상세 설명

참고: 호환성이 제한적으로 보장되는 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 유효성 검사 계층을 활성화하고, 런타임에 Vulkan 구현에서 지원되는 한 인스턴스 수준 확장 QRhi 보고서(예: VK_KHR_get_physical_device_properties2)도 원하는 대로 활성화합니다.

전자는 선택 사항이며 개발 단계에서 유용합니다. 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 개체를 만들 수 있습니다.

벌칸 장치에서 추가 확장을 활성화하도록 요청하려면 deviceExtensions 에 나열하세요. 이는 네이티브 벌칸 렌더링 코드와 통합할 때 관련될 수 있습니다.

QVulkanInstance 을 초기화하기 전에 정적 함수 preferredInstanceExtensions()를 호출하여 백엔드에서 원하는 인스턴스 확장 목록을 쿼리할 것으로 예상됩니다. 지원되지 않는 확장은 자동으로 필터링되므로 반환된 목록은 QVulkanInstance::setExtensions()에 그대로 안전하게 전달할 수 있습니다. 이렇게 하지 않으면 시스템의 Vulkan 구현이 관련 기능을 지원하더라도 QRhi::CustomInstanceStepRate 같은 특정 기능이 지원되지 않는 것으로 보고될 수 있습니다.

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

기존 벌칸 디바이스에서 작업하기

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

물리적 디바이스는 항상 null이 아닌 값으로 설정해야 합니다. 물리적 디바이스만 지정하고 나머지 VkDevice 및 큐 생성은 QRhi 에 맡기려는 경우 구조체에서 다른 멤버를 채울 필요가 없습니다. 예를 들어 OpenXR로 작업하는 경우가 이에 해당합니다.

기존 VkDevice 을 채택하려면 장치 필드도 null이 아닌 값으로 설정해야 합니다. 또한 그래픽 대기열 제품군 인덱스가 필요합니다. 큐 인덱스는 기본값인 0이 적합한 경우가 많으므로 선택 사항입니다.

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

QRhi 은 외부 객체의 소유권을 갖지 않습니다.

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

멤버 함수 문서

[static] QByteArrayList QRhiVulkanInitParams::preferredExtensionsForImportedDevice()

외부에서 생성된 VkDevice 객체로 Vulkan 기반 QRhi 을 생성할 때 VkDevice 에서 활성화될 것으로 예상되는 디바이스 확장 목록을 반환합니다.

[static] QByteArrayList QRhiVulkanInitParams::preferredInstanceExtensions()

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

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

멤버 변수 문서

QByteArrayList QRhiVulkanInitParams::deviceExtensions

선택 사항이며 기본적으로 비어 있습니다. 활성화할 Vulkan 장치 확장 목록입니다. 지원되지 않는 확장은 정상적으로 무시됩니다.

QVulkanInstance *QRhiVulkanInitParams::inst

QVulkanInstance 이미 성공적으로 created, 필수입니다.

QWindow *QRhiVulkanInitParams::window

선택 사항이지만 QWindow 을 타겟팅할 때 권장됩니다.

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