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를 모두 서브 클래스화합니다. 전자는 입력과 같은 이벤트를 처리할 수 있고, 후자는 애플리케이션의 렌더링을 구성하는 벌칸 리소스 관리 및 명령 버퍼 구축을 구현할 수 있습니다.
이벤트 처리 외에도 QVulkanWindow 서브클래스는 QVulkanWindow::createRenderer()에 대한 구현도 제공합니다. 여기에서 창과 렌더러가 연결됩니다. 일반적인 구현은 단순히 QVulkanWindowRenderer의 서브클래스의 새 인스턴스를 생성합니다.
멤버 함수 문서
[virtual noexcept]
QVulkanWindowRenderer::~QVulkanWindowRenderer()
가상 디스트럭터.
[virtual]
void QVulkanWindowRenderer::initResources()
이 가상 함수는 렌더러의 그래픽 리소스를 생성할 때가 되면 호출됩니다.
QVulkanWindow::PersistentResources 플래그, 디바이스 분실 상황 등에 따라 이 함수는 QVulkanWindow 의 수명 동안 두 번 이상 호출될 수 있습니다. 그러나 후속 호출에는 항상 releaseResources() 호출이 선행됩니다.
장치(), 그래픽큐브(), 그래픽커맨드풀() 같은 접근자는 이 함수 내에서만, 그리고 이후 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()를 호출하는 것이 필수적입니다.
[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도 참조하세요 .
© 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.