헬로 벌칸 트라이앵글 예시
QVulkanWindow 및 Vulkan API를 사용한 렌더링의 기본 사항을 보여줍니다.
헬로 벌칸 트라이앵글 예제는 버텍스와 프래그먼트 셰이더를 포함한 전체 그래픽 파이프라인을 생성하여 삼각형을 렌더링합니다.
시작
Vulkan을 사용하는 각 Qt 애플리케이션에는 애플리케이션 수준 상태를 캡슐화하고 Vulkan 라이브러리를 초기화하는 Vulkan instance
이 있어야 합니다.
QVulkanWindow 은 항상 QVulkanInstance 과 연결되어야 하므로 이 예제에서는 창 전에 인스턴스 생성을 수행합니다. QVulkanInstance 객체도 창보다 오래 지속되어야 합니다.
QVulkanInstance inst; inst.setLayers({ "VK_LAYER_KHRONOS_validation" }); if (!inst.create()) qFatal("Failed to create Vulkan instance: %d", inst.errorCode());
이 예에서는 지원되는 경우 유효성 검사 계층을 활성화합니다. 요청된 레이어가 없는 경우 요청은 무시됩니다. 비슷한 방식으로 추가 레이어와 확장을 활성화할 수 있습니다.
VulkanWindow w; w.setVulkanInstance(&inst); w.resize(1024, 768); w.show();
인스턴스가 준비되면 이제 창을 만들 차례입니다. w
은 스택에 존재하며 inst
뒤에 선언됩니다.
QVulkanWindow 서브클래스
QVulkanWindow 에 사용자 정의 기능을 추가하려면 서브클래싱이 사용됩니다. 이는 QOpenGLWindow 와 QOpenGLWidget 의 기존 패턴을 따르지만 QVulkanWindow 은 별도의 QVulkanWindowRenderer 객체를 사용합니다.
QVulkanWindow 서브클래스는 팩토리 함수 QVulkanWindow::createRenderer()를 재구현합니다. 이는 QVulkanWindowRenderer 서브클래스의 새 인스턴스를 반환합니다. 창 객체를 통해 다양한 Vulkan 리소스에 액세스할 수 있도록 창에 대한 포인터가 생성자를 통해 전달되고 저장됩니다.
class VulkanWindow : public QVulkanWindow { public: QVulkanWindowRenderer *createRenderer() override; };
실제 렌더링
QVulkanWindow 서브클래스는 QVulkanWindowRenderer::startNextFrame()의 재구현에서 그리기 호출을 대기열에 넣습니다. 완료되면 QVulkanWindow::frameReady()를 다시 호출해야 합니다. 이 예제에는 비동기 명령 생성이 없으므로 frameReady() 호출은 startNextFrame()에서 직접 이루어집니다. 지속적인 업데이트를 받으려면 이 예제에서는 QWindow::requestUpdate()를 호출하여 다시 그리기를 예약하기만 하면 됩니다.
이 예시에서는 다중 샘플 앤티앨리어싱도 보여줍니다. QVulkanWindow::supportedSampleCounts ()에서 보고된 지원되는 샘플 수에 따라 이 예제는 8배, 4배 또는 멀티샘플링 없음 중에서 선택합니다. 멀티샘플 컬러 버퍼가 자동으로 추가 생성되고 각 프레임의 기본 렌더 패스가 끝날 때 스왑체인 버퍼로 리졸브가 수행되는 등 QVulkanWindow::setSamples()를 통해 구성되면 QVulkanWindow 이 나머지 작업을 처리합니다.
예제 실행하기
에서 예제를 실행하려면 Qt Creator에서 Welcome 모드를 열고 Examples 에서 예제를 선택합니다. 자세한 내용은 예제 빌드 및 실행하기를 참조하세요.
© 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.