QVulkanWindowRenderer Class
QVulkanWindowRenderer 클래스는 QVulkanWindow 에 대한 애플리케이션별 렌더링 로직을 구현하는 데 사용됩니다. 더 보기...
| 헤더: | #include <QVulkanWindowRenderer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
공개 함수
| virtual | ~QVulkanWindowRenderer() |
| virtual void | initResources() |
| virtual void | initSwapChainResources() |
| virtual void | logicalDeviceLost() |
| virtual void | physicalDeviceLost() |
| virtual void | preInitResources() |
| virtual void | releaseResources() |
| virtual void | releaseSwapChainResources() |
| virtual void | startNextFrame() = 0 |
상세 설명
일반적으로 애플리케이션은 ` QVulkanWindow `과 `QVulkanWindowRenderer`를 모두 상속받은 서브클래스를 생성합니다. 전자는 입력과 같은 이벤트를 처리할 수 있게 해주고, 후자는 애플리케이션의 렌더링을 구성하는 Vulkan 리소스 관리 및 명령 버퍼 생성을 구현할 수 있게 해줍니다.
이벤트 처리 외에도, ` QVulkanWindow ` 서브클래스는 ` QVulkanWindow::createRenderer()`에 대한 구현을 제공하는 역할도 담당합니다. 이 메서드를 통해 창과 렌더러가 연결됩니다. 일반적인 구현에서는 단순히 `QVulkanWindowRenderer`의 서브클래스 인스턴스를 새로 생성합니다.
멤버 함수 문서
[virtual noexcept] QVulkanWindowRenderer::~QVulkanWindowRenderer()
가상 소멸자.
[virtual] void QVulkanWindowRenderer::initResources()
이 가상 함수는 렌더러의 그래픽 리소스를 생성해야 할 시점에 호출됩니다.
QVulkanWindow::PersistentResources 플래그, 디바이스 손실 상황 등에 따라 이 함수는 QVulkanWindow 의 수명 주기 동안 한 번 이상 호출될 수 있습니다. 그러나 후속 호출 전에는 항상 releaseResources() 호출이 선행됩니다.
device(), graphicsQueue(), graphicsCommandPool()과 같은 액세서 함수는 이 함수 내부와 그 이후, releaseResources()가 호출될 때까지 유효한 값을 반환할 것이 보장됩니다.
기본 구현은 비어 있습니다.
[virtual] void QVulkanWindowRenderer::initSwapChainResources()
이 가상 함수는 스왑체인, 프레임버퍼 또는 렌더패스와 관련된 초기화가 수행될 수 있을 때 호출됩니다. 스왑체인 및 관련 리소스는 창 크기 조정 이벤트에 반응하여 재설정된 후 다시 생성되므로, initResources()과 releaseResources()에 대한 두 번의 호출 사이에는 initSwapChainResources()와 releaseSwapChainResources() 호출이 여러 번 삽입될 수 있습니다.
QVulkanWindow::swapChainImageSize()과 같은 액세서 함수는 이 함수 내부와 그 이후, releaseSwapChainResources()이 호출될 때까지만 유효한 값을 반환하는 것이 보장됩니다.
또한 이 함수는 사실상 크기가 변경될 때마다 호출되므로, 크기에 의존하는 계산(예: 투영 행렬)은 이곳에서 수행되어야 합니다.
기본 구현은 비어 있습니다.
[virtual] void QVulkanWindowRenderer::logicalDeviceLost()
이 가상 함수는 논리 장치(VkDevice)가 손실되었을 때 호출되며, 이는 VK_ERROR_DEVICE_LOST 에서 어떤 작업이 실패했음을 의미합니다.
기본 구현은 비어 있습니다.
일반적으로 이 함수에서 특별한 작업을 수행할 필요는 없습니다. ` QVulkanWindow `은 모든 리소스를 자동으로 해제하고(필요한 경우 ` releaseSwapChainResources()` 및 ` releaseResources()`을 호출함), 새로운 장치를 확보하여 재초기화를 시도합니다. 물리적 장치도 손실된 경우, 이 재초기화 시도는 ` physicalDeviceLost()`을 반환할 수 있습니다.
physicalDeviceLost()도 참조하십시오 .
[virtual] void QVulkanWindowRenderer::physicalDeviceLost()
이 가상 함수는 물리적 장치가 손실되었을 때 호출되며, 이는 논리적 장치 생성이 ` VK_ERROR_DEVICE_LOST` 오류로 실패했음을 의미합니다.
기본 구현은 비어 있습니다.
QVulkanWindow 는 일정 시간이 지나면 자동으로 초기화를 재시도하므로, 일반적으로 이 함수에서 특별한 작업을 수행할 필요는 없습니다.
logicalDeviceLost()도 참조하십시오 .
[virtual] void QVulkanWindowRenderer::preInitResources()
이 가상 함수는 그래픽 초기화가 시작되기 직전, 즉 initResources() 호출로 이어지는 단계가 시작되기 직전에 호출됩니다.
일반적으로 이 함수를 재구현할 필요는 없습니다. 그러나 물리적 장치와 서피스를 모두 기반으로 한 결정이 필요한 경우가 있습니다. 이 작업들은 해당 단계에서 Vulkan 서피스를 가져올 수 없기 때문에, 일반적으로 ` QVulkanWindow ()`를 가시화하기 전에는 수행할 수 없습니다.
대신, 애플리케이션은 이 함수를 재구현할 수 있습니다. 이때 QVulkanWindow::physicalDevice()과 QVulkanInstance::surfaceForWindow()은 모두 작동하지만, 논리적 장치 초기화는 아직 수행되지 않은 상태입니다.
기본 구현은 비어 있습니다.
[virtual] void QVulkanWindowRenderer::releaseResources()
이 가상 함수는 렌더러의 그래픽 리소스를 해제해야 할 때 호출됩니다.
이 함수가 호출된 후, 나중에 ` initResources()`가 호출될 수 있도록 구현을 준비해야 합니다.
QVulkanWindow 이 함수를 호출하기 전과 호출한 후에 장치가 유휴 상태가 될 때까지 기다리는 작업은 이 함수가 처리합니다.
기본 구현은 비어 있습니다.
[virtual] void QVulkanWindowRenderer::releaseSwapChainResources()
이 가상 함수는 스왑체인, 프레임버퍼 또는 렌더패스와 관련된 리소스를 해제해야 할 때 호출됩니다.
이 함수를 호출한 후, 나중에 initSwapChainResources() 함수가 다시 호출될 수 있도록 구현해야 합니다.
QVulkanWindow 이 함수를 호출하기 전과 호출한 후에 장치가 유휴 상태가 될 때까지 기다리는 처리를 담당합니다.
기본 구현은 비어 있습니다.
참고: 이곳은 ` QVulkanWindow `가 모든 그래픽 리소스의 해제를 시작하기 전에, 모든 그래픽 리소스가 온전한 상태로 처리할 수 있는 마지막 장소입니다. 따라서 비동기적이고 잠재적으로 멀티스레드 방식의 ` startNextFrame()`를 사용하는 구현에서는, 보류 중인 프레임 제출이 있는 경우 이 함수에서 반환하기 전에 ` QVulkanWindow::frameReady()`를 호출하고 차단 대기(blocking wait)를 수행해야 합니다.
[pure virtual] void QVulkanWindowRenderer::startNextFrame()
이 가상 함수는 다음 프레임에 대한 드로우 호출을 명령 버퍼에 추가할 때 호출됩니다.
이 함수를 호출할 때마다 반드시 QVulkanWindow::frameReady() 호출이 뒤따라야 합니다. 그렇지 않을 경우 렌더링 루프가 중단됩니다. 이 호출은 이 함수에서 반환된 후 나중에 수행할 수도 있습니다. 즉, 비동기 작업을 시작한 다음, 해당 작업이 완료된 시점에 명령 버퍼를 업데이트하고 QVulkanWindow 를 호출하여 알릴 수 있습니다.
이 함수가 호출될 때 모든 Vulkan 리소스는 초기화되어 사용 준비가 완료된 상태입니다. 현재 프레임버퍼와 메인 명령 버퍼는 QVulkanWindow::currentFramebuffer() 및 QVulkanWindow::currentCommandBuffer()를 통해 가져올 수 있습니다. 논리 장치와 활성 그래픽 큐는 QVulkanWindow::device() 및 QVulkanWindow::graphicsQueue()를 통해 사용할 수 있습니다. 구현체는 QVulkanWindow::graphicsCommandPool()가 반환하는 풀에서 추가 명령 버퍼를 생성할 수 있습니다. 편의상, 호스트 가시 메모리 및 장치 로컬 메모리 유형의 인덱스는 QVulkanWindow::hostVisibleMemoryIndex() 및 QVulkanWindow::deviceLocalMemoryIndex()를 통해 노출됩니다. 이러한 모든 액세서 함수는 어떤 스레드에서 호출하더라도 안전합니다.
QVulkanWindow::frameReady() 및 QVulkanWindow도 참조하십시오 .
© 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.