3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-01-28

目次に戻る

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

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:欲しいものリスト

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?