Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@tositada_nakada

初めてのVulkanプログラミング step3 サーフェスの作成(GLFW)

More than 1 year has passed since last update.

目次に戻る

ソースコードは以下の場所に置いておきます。各自のバージョンに合わせたプロパティ設定をしてから自由にご利用ください。

GitHub

スワップチェーンは、拡張機能

vulkanは、数学的な演算、物理計算の高速化、ビデオストリームの処理など、グラフィクス以外にも使用することができます。その使用用途は、グラフィクス的にモニターに出力結果を表示することに限りません。そのためApiは、OSに依存しません。

レンダリングした画像を表示したいならば、スワップチェーンを使用する必要があります。しかしOSにより、描写のための方法が大きく違います。そのためvulkanのスワップチェーンとサーフェスは、OSに依存する必要があります。

インスタンス拡張の確認

インスタンス拡張が使用しているデバイスで使えるかどうか確認する必要があります。

uint32_t extensions_count = 0;
    vkEnumerateInstanceExtensionProperties(nullptr, &extensions_count, nullptr);
    std::vector<VkExtensionProperties> extensions(extensions_count);
    vkEnumerateInstanceExtensionProperties(nullptr, &extensions_count, extensions.data());

    std::cout << std::endl;
    std::cout << "Amount of Extensions " << extensions_count << std::endl;
    for (int i = 0; i < extensions_count; i++) {
        std::cout << std::endl;
        std::cout << "Name:        " << extensions[i].extensionName<< std::endl;
        std::cout << "specVersion: " << extensions[i].specVersion << std::endl;

    }

インスタンス拡張

今回は、windowなので、vulkanのインターフェースと、windowsのインターフェースを使用する。

使用するextensionをvkInstancereateinfoに入れる

const std::vector<const char*>_instance_extensions = {
            VK_KHR_SURFACE_EXTENSION_NAME,
       VK_KHR_WIN32_SURFACE_EXTENSION_NAME
};
    instance_create_info.enabledExtensionCount = _instance_extensions.size();
    instance_create_info.ppEnabledExtensionNames = _instance_extensions.data();

Window surface

vulkanは、ハードウェアに依存しないApiなので、直接ウィンドウシステムと、やり取りをすることができません。
そのためサーフェスと呼ばれるウィンドウシステムを操作するための機能を持つ必要があります。
例えばwindowsには、windows用のウィンドウシステム、Androidには、Android用のウィンドウシステムが用意されており、それぞれをvulkanのサーフェスに渡すことで画面の操作ができます。その中で今回は、GLFWのサーフェスを扱います。

GLFWの中には、vulkanのサーフェスを取得する関数が最初からあります。その関数を使うには、GLFW_INCLUDE_VULKAN を有効にしてあげる必要があります。

#define GLFW_INCLUDE_VULKAN 1

GLFWでは、以下の関数を使うことによってサーフェスを作成することができます。

vkSurfaceKHR _surface = VK_NULL_HANDLE;
glfwCreateWindowSurface(_instance, _GLFW_window, nullptr, &_surface);

パラメータは、vkInstance,ウィンドウポインター、カスタムアロケータ、そして今回作成するvkSurfaceKHRへのポインターです。

最後に

今回は、GLFWでのサーフェスの作成を行った。
サーフェスの作成は、OSの環境によってたくさんの方法があるのでそれについて今後書いていきたい。

連絡先

tweeter: tositada_nakada
mail: nakadasanda@outlook.com

寄付

paypal: tositada_nakada
Amazon:欲しいものリスト

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tositada_nakada
石川で大学生やっています。 使える言語:vulkan/physix/c++/日本語

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?