QVulkanDeviceFunctions Class
QVulkanDeviceFunctions クラスは、デバイスレベルの Vulkan 1.3 コア API へのクロスプラットフォームでのアクセスを提供します。詳細...
| ヘッダー: | #include <QVulkanDeviceFunctions> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
- QVulkanDeviceFunctionsは、「3Dレンダリング」の一部です。
詳細な説明
QtおよびQtアプリケーションは、デフォルトではいかなるVulkanライブラリにもリンクしません。その代わり、すべての関数は実行時に動的に解決されます。各QVulkanInstance は、QVulkanInstance::functions()を介して取得可能なQVulkanFunctions オブジェクトを提供します。これには、内部ディスパッチによる潜在的なオーバーヘッドを回避するため、デバイスレベルの関数は含まれていません。 その代わり、デバイス、またはデバイスのディスパッチ可能な子オブジェクトに依存する関数は、QVulkanDeviceFunctionsおよびQVulkanInstance::deviceFunctions()を通じて公開されます。QVulkanFunctions とQVulkanDeviceFunctionsを組み合わせることで、拡張機能を除くVulkanコアAPI全体にアクセスできるようになります。
注:QVulkanDeviceFunctionsの インスタンスを直接生成することはできません。
一般的な使用方法は以下の通りです:
void Window::render()
{
QVulkanInstance *inst = vulkanInstance();
QVulkanDeviceFunctions *df = inst->deviceFunctions(device);
VkResult err = df->vkAllocateCommandBuffers(device, &cmdBufInfo, &cmdBuf);
// ...
}指定された VkDevice に対応する QVulkanDeviceFunctions オブジェクトは、対象のデバイスに対してQVulkanInstance::deviceFunctions() が最初に呼び出された際に作成されます。その後、このオブジェクトは内部でキャッシュされます。
追加の関数にアクセスするには、アプリケーションは `QVulkanInstance::getInstanceProcAddr()` および `vkGetDeviceProcAddr()` を使用できます。また、多くの実装ではコアコマンドの関数シンボルがエクスポートされているため、アプリケーションは Vulkan ライブラリに直接リンクすることも可能です。詳細については、`vkGetInstanceProcAddr` のマニュアルページを参照してください。
セキュリティ上の考慮事項
QVulkanDeviceFunctions は、Vulkan API をそのまま公開する薄いディスパッチ層です。引数は、信頼されたインプロセス・プラットフォーム依存関係である基盤となる Vulkan 実装に、そのまま転送されます。 Qt は、渡されたハンドル、構造体、ポインタを検査、検証、またはサニタイズすることはなく、返された結果に基づいて動作することもありません。これには、とりわけ、すべてのリソース作成、メモリマッピング、およびコマンドバッファ構築コマンドが含まれます。 したがって、ここでメンバ関数を呼び出すことは、対応する Vulkan コマンドを直接呼び出すことと同等であり、Vulkan 仕様で定められた有効な使用規則がそのまま適用されます。これらに違反すると、Qt による正常な失敗ではなく、Vulkan 実装において未定義の挙動が生じます。
警告: QVulkanDeviceFunctions を通じて渡されるすべての データは 、信頼できる内容であることが前提となっています。アプリケーション開発者は、アプリケーションの一部ではなく、開発者の管理下にないユーザー提供のコンテンツからデータを導出する前に、その潜在的な影響を慎重に検討することを推奨します。詳細については、QVulkanInstance を参照してください。
関連項目: QVulkanInstance 、QVulkanFunctions 、QWindow::setVulkanInstance()、およびQWindow::setSurfaceType()。
© 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.