QVulkanInstance Class
QVulkanInstance 클래스는 네이티브 벌칸 인스턴스를 나타내며, QSurface 에 벌칸 렌더링을 가능하게 합니다.. ..
헤더: | #include <QVulkanInstance> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
- 상속된 멤버를 포함한 모든 멤버 목록
- QVulkanInstance는 3D 렌더링의 일부입니다.
공용 유형
DebugFilter | |
(since 6.5) enum | DebugMessageSeverityFlag { VerboseSeverity, InfoSeverity, WarningSeverity, ErrorSeverity } |
flags | DebugMessageSeverityFlags |
(since 6.5) enum | DebugMessageTypeFlag { GeneralMessage, ValidationMessage, PerformanceMessage } |
flags | DebugMessageTypeFlags |
(since 6.5) | DebugUtilsFilter |
enum | Flag { NoDebugOutputRedirect, NoPortabilityDrivers } |
flags | Flags |
공용 함수
QVulkanInstance() | |
~QVulkanInstance() | |
QVersionNumber | apiVersion() const |
(since 6.5) void | clearDebugOutputFilters() |
bool | create() |
void | destroy() |
QVulkanDeviceFunctions * | deviceFunctions(VkDevice device) |
VkResult | errorCode() const |
QByteArrayList | extensions() const |
QVulkanInstance::Flags | flags() const |
QVulkanFunctions * | functions() const |
PFN_vkVoidFunction | getInstanceProcAddr(const char *name) |
(since 6.5) void | installDebugOutputFilter(QVulkanInstance::DebugUtilsFilter filter) |
void | installDebugOutputFilter(QVulkanInstance::DebugFilter filter) |
bool | isValid() const |
QByteArrayList | layers() const |
void | presentAboutToBeQueued(QWindow *window) |
void | presentQueued(QWindow *window) |
void | removeDebugOutputFilter(QVulkanInstance::DebugFilter filter) |
void | resetDeviceFunctions(VkDevice device) |
void | setApiVersion(const QVersionNumber &vulkanVersion) |
void | setExtensions(const QByteArrayList &extensions) |
void | setFlags(QVulkanInstance::Flags flags) |
void | setLayers(const QByteArrayList &layers) |
void | setVkInstance(VkInstance existingVkInstance) |
QVersionNumber | supportedApiVersion() const |
QVulkanInfoVector<QVulkanExtension> | supportedExtensions() const |
QVulkanInfoVector<QVulkanLayer> | supportedLayers() const |
bool | supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, QWindow *window) |
VkInstance | vkInstance() const |
정적 공용 멤버
VkSurfaceKHR | surfaceForWindow(QWindow *window) |
상세 설명
Vulkan은 크로스 플랫폼의 명시적 그래픽 및 컴퓨팅 API입니다. 이 클래스는 크로스 플랫폼 방식으로 Vulkan 라이브러리를 로드하고 instance
를 생성하는 데 대한 지원을 제공합니다. 벌칸 인스턴스에 대한 소개는 사양의 섹션 3.2를 참조하세요.
참고: 벌칸 인스턴스 및 벌칸 지원 서페이스가 있는 창에 대한 플랫폼별 지원은 다양한 플랫폼 플러그인에서 제공합니다. 그러나 모든 플러그인이 Vulkan을 지원하는 것은 아닙니다. 이러한 플랫폼에서 실행할 경우 create()는 실패하고 항상 false
을 반환합니다.
참고: 빌드 시점에 필요한 Vulkan 헤더를 사용할 수 없기 때문에 특정 Qt 빌드에서 Vulkan 지원이 자동으로 비활성화될 수 있습니다. 이 경우 configure
의 출력에 Vulkan 지원이 비활성화되었음을 나타내면 QVulkan* 클래스를 사용할 수 없게 됩니다.
참고: 일부 함수는 다양한 벌칸 헤더 개정 사이에 서명이 변경되었습니다. Qt를 빌드할 때 시스템에 충돌하는 이전 서명이 있는 헤더만 존재하면 Vulkan 지원이 비활성화됩니다. 벌칸 1.0.39 이상의 헤더를 사용하는 것이 좋습니다.
초기화
QOpenGLContext 와 유사하게 실제 Vulkan 인스턴스 생성은 create()를 호출할 때만 발생합니다. 이렇게 하면 초기화 수행 시기를 제어하면서 QVulkanInstance를 일반 멤버 변수로 사용할 수 있습니다.
supportedLayers() 및 supportedExtensions()을 호출하여 지원되는 인스턴스 수준 레이어 및 확장을 쿼리할 수 있습니다. 이는 Vulkan 라이브러리가 로드되도록 보장하므로 create() 이전에도 안전하게 호출할 수 있습니다.
인스턴스는 애플리케이션별 벌칸 상태를 저장하며 VkInstance
객체를 생성하면 벌칸 라이브러리가 초기화됩니다. 실제로는 일반적으로 main() 초기에 하나의 인스턴스가 생성됩니다. 그런 다음 객체는 애플리케이션을 종료할 때까지 살아 있는 상태로 유지됩니다.
모든 Vulkan 기반 QWindow 은 QWindow::setVulkanInstance()을 호출하여 QVulkanInstance와 연결해야 합니다. 따라서 일반적인 애플리케이션 패턴은 다음과 같습니다:
int main(int argc, char **argv) { QGuiApplication app(argc, argv); QVulkanInstance inst; if (!inst.create()) return 1; // ... window->setVulkanInstance(&inst); window->show(); return app.exec(); }
구성
QVulkanInstance는 새로 생성된 인스턴스에서 필요한 최소한의 확장 세트를 자동으로 활성화합니다. 실제로 이것은 VK_KHR_*_surface
확장 제품군을 의미합니다.
기본적으로 Vulkan 디버그 출력(예: 유효성 검사 계층의 메시지)은 qDebug()로 라우팅됩니다. create ()를 호출하기 전에 setFlags()에 NoDebugOutputRedirect
플래그를 전달하여 이 기능을 비활성화할 수 있습니다.
추가 레이어 및 확장을 사용하려면 create()를 호출하기 전에 setLayers() 및 setExtensions()를 통해 목록을 제공하세요. 지정된 레이어 또는 확장이 인스턴스에서 사용 가능한 것으로 보고되지 않으면 요청이 무시됩니다. create ()를 성공적으로 호출한 후 layers() 및 extensions()와 같은 함수에서 반환되는 값은 실제로 활성화된 레이어 및 확장 기능을 반영합니다. 필요한 경우, 예를 들어 충돌하여 Vulkan 인스턴스 생성에 실패할 수 있는 확장 요청을 피하려면 create() 호출 전에 supportedLayers() 및 supportedExtensions()를 통해 실제로 지원되는 레이어 및 확장 목록을 검사할 수 있습니다.
예를 들어 표준 유효성 검사 계층을 활성화하려면 다음과 같이 할 수 있습니다:
QVulkanInstance inst; // Enable validation layer, if supported. Messages go to qDebug by default. inst.setLayers({ "VK_LAYER_KHRONOS_validation" }); bool ok = inst.create(); if (!ok) { // ... Vulkan not available } if (!inst.layers().contains("VK_LAYER_KHRONOS_validation")) { // ... validation layer not available }
또는 Vulkan 인스턴스 생성을 시도하기 전에 결정을 내릴 수도 있습니다:
QVulkanInstance inst; if (inst.supportedLayers().contains("VK_LAYER_KHRONOS_validation")) { // ... } bool ok = inst.create(); // ...
기존 인스턴스 채택
기본적으로 QVulkanInstance는 새 벌칸 인스턴스를 생성합니다. 외부 엔진 및 렌더러로 작업할 때는 이 방법이 바람직하지 않을 수 있습니다. 이미 사용 가능한 VkInstance
핸들이 있는 경우 create()를 호출하기 전에 setVkInstance()를 호출하세요. 이렇게 하면 추가 인스턴스가 생성되지 않고 QVulkanInstance가 핸들을 소유하지 않습니다.
참고: 필요한 확장이 활성화되어 있는지 확인하는 것은 외부 인스턴스를 생성하는 컴포넌트의 몫입니다. 여기에는 VK_KHR_surface
해당 플랫폼에 적합한 WSI 전용 VK_KHR_*_surface
, QVulkanInstance의 디버그 출력 리디렉션이 필요한 경우 VK_EXT_debug_utils
등이 있습니다.
핵심 벌칸 명령에 액세스하기
QVulkanInstance가 래핑하는 VkInstance
핸들에 액세스하려면 vkInstance()을 호출합니다. Vulkan 함수를 확인하려면 getInstanceProcAddr()를 호출합니다. 핵심 Vulkan 명령의 경우 functions() 및 deviceFunctions()를 통해 액세스할 수 있는 QVulkanFunctions 및 QVulkanDeviceFunctions 객체를 통해 제공되므로 수동으로 확인할 필요가 없습니다.
참고: QVulkanFunctions 및 QVulkanDeviceFunctions 은 Qt 라이브러리를 빌드할 때 Vulkan API XML 사양에서 생성됩니다. 따라서 이에 대한 문서는 제공되지 않습니다. 여기에는 Vulkan API 문서에 설명된 것과 동일한 서명을 가진 Vulkan 1.2 함수가 포함되어 있습니다.
창에 대한 네이티브 벌칸 서피스 가져오기
두 가지 일반적인 창 시스템 관련 작업은 창에 대한 표면( VkSurfaceKHR
핸들)을 가져오는 것과 주어진 대기열 패밀리가 주어진 표면에 프레젠테이션을 지원하는지 쿼리하는 것입니다. 애플리케이션에서 WSI 관련 비트를 피하기 위해 이러한 작업은 QVulkanInstance와 기본 QPA 레이어에 의해 추상화됩니다.
창에 대한 벌칸 서페이스를 생성하거나 기존 서페이스를 검색하려면 surfaceForWindow()를 호출합니다. 대부분의 플랫폼은 surfaceForWindow()을 처음 호출할 때 VK_KHR_*_surface
을 통해서만 서페이스를 생성하지만, 내부 동작에 플랫폼별로 차이가 있을 수 있습니다. 일단 생성되면 이후 surfaceForWindow()를 호출하면 동일한 핸들을 반환합니다. 이는 일반적인 Vulkan 지원 QWindow 서브클래스의 구조와 잘 맞습니다.
물리적 디바이스 내에서 지정된 대기열 패밀리를 사용하여 지정된 서페이스에 프레젠테이션을 수행할 수 있는지 쿼리하려면 supportsPresent()를 호출합니다. 여기에는 일반 vkGetPhysicalDeviceSurfaceSupportKHR
및 WSI 전용 vkGetPhysicalDevice*PresentationSupportKHR
검사가 모두 캡슐화되어 있습니다.
문제 해결
create()에서 false
또는 0
를 반환하는 것 외에도 surfaceForWindow()에서 중요한 오류는 qWarning()를 통해 디버그 출력에 인쇄됩니다. 로깅 카테고리에 대한 디버그 출력을 활성화하여 추가 로깅을 요청할 수 있습니다 qt.vulkan
. 인스턴스 생성의 실제 Vulkan 오류 코드는 create() 실패 후 errorCode()를 호출하여 검색할 수 있습니다.
일부 특수한 경우에는 Vulkan 라이브러리 이름을 재정의해야 할 수도 있습니다. 이는 QT_VULKAN_LIB
환경 변수를 설정하여 수행할 수 있습니다.
예제
다음은 Vulkan을 지원하는 QWindow 을 만드는 기본 개요입니다:
class VulkanWindow : public QWindow {public: VulkanWindow() { setSurfaceType(VulkanSurface); } void exposeEvent(QExposeEvent *) { if (isExposed()) { if (!m_initialized) { m_initialized = true; // 디바이스, 스왑체인 등을 초기화합니다. QVulkanInstance *inst = vulkanInstance(); QVulkanFunctions *f = inst->functions(); uint32_t devCount = 0; f->vkEnumeratePhysicalDevices(inst->vkInstance(), &devCount, nullptr); // ... // 첫 프레임 빌드render(); } } } } bool event(QEvent *e) { if (e->type()==. QEvent::UpdateRequest) render(); return QWindow::event(e); } void render() { // ...requestUpdate(); // 지속적으로 렌더링}private: bool m_initialized = false; };int main(int argc, char**argv) { QGuiApplication app(argc, argv); QVulkanInstance inst; if (!inst.create()) { qWarning("Vulkan not available"); return 1; } VulkanWindow window; window.showMaximized(); return app.exec(); }
참고: 잘 동작하는 창 구현은 노출 외에도 스왑 체인의 적절한 관리를 위해 크기 조정 및 QPlatformSurfaceEvent 같은 추가 이벤트도 처리해야 합니다. 또한 일부 플랫폼에서는 더 이상 노출되지 않을 때 리소스를 해제해야 할 수도 있습니다.
벌칸에 C++ 바인딩 사용하기
Qt의 벌칸 인에이블러를 C++ 벌칸 래퍼(예: Vulkan-Hpp)와 결합하는 것도 가능합니다. 여기서 전제 조건은 C++ 계층이 소유권을 가지지 않고도 클래스에서 네이티브 핸들(VkInstance, VkSurfaceKHR)을 채택할 수 있어야 한다는 것입니다(소유권은 QVulkanInstance와 QWindow). 다음 사항도 고려하세요:
- 일부 래퍼는 예외 지원을 활성화해야 합니다. Qt는 예외를 사용하지 않습니다. 애플리케이션에 예외를 활성화하려면
.pro
파일에CONFIG += exceptions
을 추가하세요. - 일부 래퍼는
vulkan.h
에서 프로토타입을 제공하고 애플리케이션이 필요한 모든 심볼을 내보내는 Vulkan 라이브러리에 링크되어 있다고 가정하여 Vulkan 함수를 직접 호출합니다. Qt는 Vulkan 라이브러리에 직접 링크되지 않을 수도 있습니다. 따라서 일부 플랫폼에서는 애플리케이션의.pro
파일에LIBS += -lvulkan
또는 이와 유사한 파일을 추가해야 할 수 있습니다. - QVulkan 클래스의 헤더에는
VK_NO_PROTOTYPES
을 활성화한vulkan.h
이 포함될 수 있습니다. 이로 인해 프로토타입에 의존하는 C++ 래퍼 헤더에서 문제가 발생할 수 있습니다. 따라서 애플리케이션 코드에서 QVulkan 헤더 앞에vulkan.hpp
또는 이와 유사한 헤더를 포함해야 할 수 있습니다.
QVulkanFunctions 및 QSurface::SurfaceType 을참조하세요 .
멤버 유형 문서
QVulkanInstance::DebugFilter
디버그 필터링 콜백 함수에는 다음 서명과 함께 Typedef를 사용합니다:
bool myDebugFilter(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char *pLayerPrefix, const char *pMessage)
true
을 반환하면 메시지의 인쇄가 억제됩니다.
참고: Qt 6.5부터는 더 이상 사용되지 않는 VK_EXT_debug_report
대신 VK_EXT_debug_utils
이 사용됩니다. 콜백 시그니처는 VK_EXT_debug_report를 기반으로 합니다. 따라서 모든 인수가 더 이상 유효할 것으로 예상할 수 없습니다. pMessage
, messageCode
, object
이외의 인수를 사용하지 마세요. VK_EXT_debug_utils에 지정된 대로 모든 콜백 데이터에 액세스하려는 애플리케이션은 DebugUtilsFilter 으로 마이그레이션해야 합니다.
installDebugOutputFilter() 및 removeDebugOutputFilter()도 참조하십시오 .
[since 6.5]
열거형 QVulkanInstance::DebugMessageSeverityFlag
플래그 QVulkanInstance::DebugMessageSeverityFlags
상수 | 값 |
---|---|
QVulkanInstance::VerboseSeverity | 0x01 |
QVulkanInstance::InfoSeverity | 0x02 |
QVulkanInstance::WarningSeverity | 0x04 |
QVulkanInstance::ErrorSeverity | 0x08 |
이 열거형은 Qt 6.5에 도입되었습니다.
DebugMessageSeverityFlags 형은 QFlags<DebugMessageSeverityFlag>에 대한 typedef입니다. DebugMessageSeverityFlag 값의 OR 조합을 저장합니다.
[since 6.5]
열거형 QVulkanInstance::DebugMessageTypeFlag
플래그 QVulkanInstance::DebugMessageTypeFlags
상수 | 값 |
---|---|
QVulkanInstance::GeneralMessage | 0x01 |
QVulkanInstance::ValidationMessage | 0x02 |
QVulkanInstance::PerformanceMessage | 0x04 |
이 열거형은 Qt 6.5에 도입되었습니다.
DebugMessageTypeFlags 형은 QFlags<DebugMessageTypeFlag>에 대한 typedef입니다. DebugMessageTypeFlag 값의 OR 조합을 저장합니다.
[alias, since 6.5]
QVulkanInstance::DebugUtilsFilter
디버그 필터링 콜백 함수에는 다음과 같은 서명을 가진 Typedef를 사용합니다:
std::function<bool(DebugMessageSeverityFlags severity, DebugMessageTypeFlags type, const void *message)>;
message
인수는 VkDebugUtilsMessengerCallbackDataEXT 구조체에 대한 포인터입니다. 자세한 내용은 VK_EXT_debug_utils
문서를 참조하세요. 1.0 이후 벌칸 헤더에 대한 종속성을 피하기 위해 Qt 헤더는 실제 형을 사용하지 않습니다.
true
을 반환하면 메시지의 인쇄가 억제됩니다.
이 typedef는 Qt 6.5에 도입되었습니다.
installDebugOutputFilter() 및 removeDebugOutputFilter()도 참조하십시오 .
열거형 QVulkanInstance::Flag
플래그 QVulkanInstance::Flags
이 열거형은 setFlags()에 전달할 수 있는 플래그를 설명합니다. 이들은 create()의 동작을 제어합니다.
상수 | 값 | 설명 |
---|---|---|
QVulkanInstance::NoDebugOutputRedirect | 0x01 | qDebug 으로의 Vulkan 디버그 출력(VK_EXT_debug_utils ) 리디렉션을 비활성화합니다. |
QVulkanInstance::NoPortabilityDrivers (since Qt 6.5) | 0x02 | Vulkan 이식성으로 표시된 물리적 디바이스 열거를 비활성화합니다. |
Flags 유형은 QFlags<Flag>에 대한 typedef입니다. 플래그 값의 OR 조합을 저장합니다.
멤버 함수 문서
QVulkanInstance::QVulkanInstance()
새 인스턴스를 생성합니다.
참고: 생성자에서는 벌칸 초기화가 수행되지 않습니다.
[noexcept]
QVulkanInstance::~QVulkanInstance()
소멸자.
참고: vkInstance()는 인스턴스가 소멸되면 nullptr
을 반환합니다.
QVersionNumber QVulkanInstance::apiVersion() const
애플리케이션이 실행할 것으로 예상되는 요청된 Vulkan API 버전을 반환하거나 setApiVersion()가 create() 이전에 호출되지 않은 경우 null 버전 번호를 반환합니다.
setApiVersion()도 참조하세요 .
[since 6.5]
void QVulkanInstance::clearDebugOutputFilters()
installDebugOutputFilter()에 의해 이전에 설치된 모든 필터 기능을 제거합니다.
참고: 이 함수는 create() 앞에 호출할 수 있습니다.
이 함수는 Qt 6.5에 도입되었습니다.
installDebugOutputFilter()도 참조하십시오 .
bool QVulkanInstance::create()
벌칸 라이브러리를 초기화하고 새 벌칸 인스턴스 또는 기존 벌칸 인스턴스를 생성합니다.
성공하면 참을 반환하고, 오류가 발생하거나 Vulkan이 지원되지 않으면 거짓을 반환합니다.
성공하면 vkInstance()를 통해 이 QVulkanInstance 포인터를 검색할 수 있습니다.
이 QVulkanInstance 가 존재하는 한 또는 destroy()가 호출될 때까지 Vulkan 인스턴스 및 라이브러리를 사용할 수 있습니다.
기본적으로 VkInstance는 플래그 VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR이 설정된 상태로 생성됩니다. 즉, 벌칸 포터빌리티 물리적 디바이스도 열거됩니다. 이를 원하지 않는 경우 NoPortabilityDrivers 플래그를 설정하세요.
void QVulkanInstance::destroy()
기본 플랫폼 인스턴스를 파괴하여 (소유하고 있는 경우) VkInstance를 파괴합니다. QVulkanInstance 객체는 create()을 다시 호출하여 계속 재사용할 수 있습니다.
QVulkanDeviceFunctions *QVulkanInstance::deviceFunctions(VkDevice device)
디바이스 수준의 핵심 Vulkan 명령 집합을 노출하고 플랫폼 간 작동이 보장되는 QVulkanDeviceFunctions 객체를 반환합니다.
참고: 반환된 객체의 Vulkan 함수는 device 또는 device 의 하위 객체(VkQueue, VkCommandBuffer)를 첫 번째 파라미터로 사용하여 호출해야만 합니다. 이는 내부 디스패치의 잠재적 오버헤드를 피하기 위해 이러한 함수가 vkGetDeviceProcAddr을 통해 확인되기 때문입니다.
참고: 반환된 객체는 QVulkanInstance 에서 소유 및 관리하므로 파기하거나 변경하지 마세요.
참고: 객체는 캐시되어 있으므로 동일한 device 으로 이 함수를 다시 호출하는 것은 비용이 적게 듭니다. 그러나 디바이스가 파괴되면 resetDeviceFunctions()을 호출하여 QVulkanInstance 에 알리는 것은 애플리케이션의 몫입니다.
핵심 Vulkan 1.0 API의 함수는 항상 사용할 수 있습니다. 1.1 및 1.2와 같은 상위 버전의 경우 QVulkanDeviceFunctions 객체는 해당 버전에 대한 핵심 API 함수도 해결하려고 시도하지만, 런타임에 Vulkan 물리적 디바이스가 이를 지원하지 않는 경우 지원되지 않는 함수를 호출하면 지정되지 않은 동작이 발생할 수 있습니다. 1.0 이상의 Vulkan 버전을 올바르게 지원하려면 create() 앞에 setApiVersion()를 호출하여 적절한 인스턴스 API 버전을 설정해야 할 수 있습니다. 또한 애플리케이션은 VkPhysicalDeviceProperties에서 물리적 디바이스의 apiVersion 을 확인해야 합니다.
functions() 및 resetDeviceFunctions()도 참조하세요 .
VkResult QVulkanInstance::errorCode() const
실패한 경우 create(), 그렇지 않으면 VK_SUCCESS
을 반환합니다.
이 값은 일반적으로 (기존 인스턴스를 채택하는 대신 새 Vulkan 인스턴스를 생성할 때) vkCreateInstance()의 반환값이지만 플랫폼 플러그인이 Vulkan을 지원하지 않는 경우 VK_NOT_READY
일 수도 있습니다.
QByteArrayList QVulkanInstance::extensions() const
create()가 호출되어 성공한 경우 활성화된 인스턴스 확장을 반환합니다. 그렇지 않으면 요청된 확장을 반환합니다.
setExtensions()도 참조하세요 .
QVulkanInstance::Flags QVulkanInstance::flags() const
요청된 플래그를 반환합니다.
setFlags()도 참조하세요 .
QVulkanFunctions *QVulkanInstance::functions() const
디바이스 수준 기능을 제외한 핵심 벌칸 명령 집합을 노출하고 플랫폼 간 작동이 보장되는 해당 QVulkanFunctions 객체를 반환합니다.
참고: 반환된 객체는 QVulkanInstance 에서 소유하고 관리합니다. 객체를 파기하거나 변경하지 마세요.
핵심 Vulkan 1.0 API의 함수는 항상 사용할 수 있습니다. 1.1 및 1.2와 같은 상위 버전의 경우 QVulkanFunctions 객체는 해당 버전에 대한 핵심 API 함수도 해결하려고 시도하지만 런타임에 Vulkan 인스턴스 구현이 해당 함수를 지원하지 않는 경우 지원되지 않는 함수를 호출하면 지정되지 않은 동작이 발생할 수 있습니다. 또한 1.0 이상의 Vulkan 버전을 제대로 지원하려면 create() 앞에 setApiVersion()를 호출하여 적절한 인스턴스 API 버전을 설정해야 할 수 있습니다. 벌칸 구현의 인스턴스 수준 버전을 쿼리하려면 supportedApiVersion()를 호출하세요.
deviceFunctions() 및 supportedApiVersion()도 참조하세요 .
PFN_vkVoidFunction QVulkanInstance::getInstanceProcAddr(const char *name)
주어진 name 으로 Vulkan 함수를 확인합니다.
핵심 벌칸 명령의 경우 functions() 및 deviceFunctions()에서 검색 가능한 함수 래퍼를 대신 사용하는 것을 선호합니다.
[since 6.5]
void QVulkanInstance::installDebugOutputFilter(QVulkanInstance::DebugUtilsFilter filter)
모든 벌칸 디버그 메시지에 대해 호출되는 filter 함수를 설치합니다. 콜백이 true
을 반환하면 메시지가 중지(필터링)되고 디버그 출력에 표시되지 않습니다.
참고: 필터링은 NoDebugOutputRedirect 이 set 이 아닌 경우에만 유효합니다. 그렇지 않으면 필터를 설치해도 아무런 효과가 없습니다.
참고: 이 함수는 create() 앞에 호출할 수 있습니다.
이 함수는 Qt 6.5에 도입되었습니다.
clearDebugOutputFilters()도 참조하세요 .
void QVulkanInstance::installDebugOutputFilter(QVulkanInstance::DebugFilter filter)
이 함수는 오버로드된 함수입니다.
모든 벌칸 디버그 메시지에 대해 호출되는 filter 함수를 설치합니다. 콜백이 true
을 반환하면 메시지가 중지(필터링)되고 디버그 출력에 표시되지 않습니다.
참고: 필터링은 NoDebugOutputRedirect 이 set 이 아닌 경우에만 유효합니다. 그렇지 않으면 필터를 설치해도 아무런 효과가 없습니다.
참고: 이 함수는 create() 앞에 호출할 수 있습니다.
removeDebugOutputFilter()도 참조하세요 .
bool QVulkanInstance::isValid() const
create()가 성공하고 인스턴스가 유효하면 true를 반환합니다.
QByteArrayList QVulkanInstance::layers() const
create()가 호출되어 성공한 경우 활성화된 인스턴스 레이어를 반환합니다. 그렇지 않으면 요청된 레이어를 반환합니다.
setLayers()도 참조하세요 .
void QVulkanInstance::presentAboutToBeQueued(QWindow *window)
이 함수는 애플리케이션의 렌더러가 window 에 대한 현재 작업을 대기열에 넣기 전에 호출해야 합니다.
일부 플랫폼에서는 이 작업이 필요하지 않지만 일부 플랫폼에서는 윈도우 시스템에 따라 동기화를 수행할 수 있습니다. 예를 들어 Wayland에서는 드라이버가 최소화 창을 차단하는 것을 방지하기 위해 wl_surface.frame 요청을 추가합니다.
void QVulkanInstance::presentQueued(QWindow *window)
이 함수는 애플리케이션의 렌더러가 window 에 대한 현재 작업을 대기열에 넣은 후 호출해야 합니다.
일부 플랫폼에서는 이 작업이 필요하지 않지만, 일부 플랫폼에서는 윈도우 시스템에 따라 동기화를 수행할 수 있습니다. 예를 들어 X11에서는 _NET_WM_SYNC_REQUEST_COUNTER
을 업데이트합니다.
void QVulkanInstance::removeDebugOutputFilter(QVulkanInstance::DebugFilter filter)
이 함수는 과부하된 함수입니다.
이전에 installDebugOutputFilter()에 의해 설치된 filter 함수를 제거합니다.
참고: 이 함수는 create() 전에 호출할 수 있습니다.
installDebugOutputFilter()도 참조하세요 .
void QVulkanInstance::resetDeviceFunctions(VkDevice device)
주어진 device 에 대한 QVulkanDeviceFunctions 객체를 무효화하고 파괴합니다.
이 함수는 애플리케이션이 계속 실행되는 동안 deviceFunctions()가 호출된 VkDevice가 소멸되어 나중에 새로운 논리적 Vulkan 디바이스가 생성될 수 있을 때 호출해야 합니다.
그러면 정리가 자동으로 수행되므로 QVulkanInstance 을 파괴하기 전에 이 함수를 호출할 필요가 없습니다.
deviceFunctions()도 참조하세요 .
void QVulkanInstance::setApiVersion(const QVersionNumber &vulkanVersion)
애플리케이션이 사용하도록 설계된 가장 높은 Vulkan API 버전을 지정합니다.
기본적으로 vulkanVersion 은 0으로, Vulkan 1.0에 매핑됩니다.
참고: 이 함수는 create() 이전에만 호출할 수 있으며 그 이후에 호출하면 아무런 영향을 미치지 않습니다.
참고: 벌칸 1.1에서는 벌칸 API 버전 필드와 관련된 동작이 변경된다는 점에 유의하세요. 벌칸 1.0에서는 지원되지 않는 vulkanVersion 을 지정하면 사양에 따라 VK_ERROR_INCOMPATIBLE_DRIVER
과 함께 create()가 실패했습니다. 벌칸 1.1부터는 사양에서 이를 허용하지 않으므로 드라이버는 인스턴스 생성에 실패하지 않고 모든 버전을 허용해야 합니다.
애플리케이션 개발자는 벌칸 사양의 apiVersion
참고 사항을 숙지하는 것이 좋습니다.
apiVersion() 및 supportedApiVersion()도 참조하세요 .
void QVulkanInstance::setExtensions(const QByteArrayList &extensions)
활성화할 추가 인스턴스 extensions 목록을 지정합니다. 런타임에 지원되지 않는 확장은 무시되므로 지원되지 않는 확장도 지정해도 안전합니다.
참고: Qt에서 요구하는 표면 관련 확장(예: VK_KHR_win32_surface
)은 이 목록에 포함할 필요 없이 항상 자동으로 추가됩니다.
참고: NoPortabilityDrivers 플래그가 설정되어 있지 않으면VK_KHR_portability_enumeration
가 자동으로 추가됩니다. 이 값은 Qt 6.5에 도입되었습니다.
참고: 이 함수는 create() 이전에만 호출할 수 있으며 그 이후에 호출하면 아무런 영향을 미치지 않습니다.
extensions()도 참조하세요 .
void QVulkanInstance::setFlags(QVulkanInstance::Flags flags)
제공된 flags 에 따라 create()의 동작을 구성합니다.
참고: 이 함수는 create() 이전에만 호출할 수 있으며 이후에 호출하면 효과가 없습니다.
flags()도 참조하세요 .
void QVulkanInstance::setLayers(const QByteArrayList &layers)
활성화할 layers 인스턴스 목록을 지정합니다. 런타임에 지원되지 않는 레이어는 무시되므로 지원되지 않는 레이어도 지정하는 것이 안전합니다.
참고: 이 함수는 create() 이전에만 호출할 수 있으며 그 이후에 호출하면 효과가 없습니다.
layers()도 참조하세요 .
void QVulkanInstance::setVkInstance(VkInstance existingVkInstance)
QVulkanInstance 이 새 핸들을 만드는 대신 기존 VkInstance 핸들을 채택하도록 합니다.
참고: existingVkInstance 에는 VK_KHR_surface
및 적절한 WSI 전용 VK_KHR_*_surface
확장이 활성화되어 있어야 합니다. 디버그 출력 리디렉션이 제대로 작동하려면 VK_EXT_debug_utils
도 필요합니다.
참고: 이 함수는 create() 이전에만 호출할 수 있으며 그 이후에 호출하면 효과가 없습니다.
vkInstance()도 참조하세요 .
QVersionNumber QVulkanInstance::supportedApiVersion() const
벌칸 구현에서 지원하는 인스턴스 수준 기능의 버전을 반환합니다.
실제로 이 값은 해당 함수를 사용할 수 있는 경우(Vulkan 1.1 이상에서) vkEnumerateInstanceVersion에서 반환되는 값 또는 1.0입니다.
런타임에 사용 가능한 벌칸 버전에 따라 벌칸 기능 및 API 사용량을 분기하려는 애플리케이션은 이 함수를 사용하여 create()를 호출하기 전에 setApiVersion()에 전달할 버전을 결정할 수 있습니다.
참고: 이 함수는 create() 전에 호출할 수 있습니다.
setApiVersion()도 참조하세요 .
QVulkanInfoVector<QVulkanExtension> QVulkanInstance::supportedExtensions() const
지원되는 인스턴스 수준 확장 목록을 반환합니다.
참고: 이 함수는 create() 앞에 호출할 수 있습니다.
QVulkanInfoVector<QVulkanLayer> QVulkanInstance::supportedLayers() const
지원되는 인스턴스 수준 레이어 목록을 반환합니다.
참고: 이 함수는 create() 앞에 호출할 수 있습니다.
bool QVulkanInstance::supportsPresent(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, QWindow *window)
physicalDevice 내에 queueFamilyIndex 를 가진 큐 패밀리가 window 로 프레젠테이션을 지원하면 true를 반환합니다.
프레젠테이션을 수행하는 데 사용할 수 있는 큐를 결정하기 위해 주어진 Vulkan 디바이스의 큐를 검사할 때 이 함수를 호출합니다.
[static]
VkSurfaceKHR QVulkanInstance::surfaceForWindow(QWindow *window)
주어진 window 에 대해 이미 존재하는 VkSurfaceKHR
핸들을 생성하거나 검색합니다.
불칸 서피스 핸들을 반환하거나 실패하면 0을 반환합니다.
VkInstance QVulkanInstance::vkInstance() const
QVulkanInstance 이 래핑하는 VkInstance 핸들을 반환하거나 create()가 아직 성공적으로 호출되지 않았고 setVkInstance()를 통해 기존 인스턴스가 제공되지 않은 경우 nullptr
을 반환합니다.
setVkInstance()도 참조하세요 .
© 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.