Graphics v0.0.0
A simple abstraction layer for the modern graphics APIs.
载入中...
搜索中...
未找到
InstanceBuilder.h
1// Copyright 2022 ShenMian
2// License(Apache-2.0)
3
4#pragma once
5
6#include "../VKInstance.h"
7#include <string_view>
8#include <vector>
9
10class InstanceBuilder final
11{
12public:
14
15 VKInstance build();
16
22 InstanceBuilder& set_engine_name(std::string_view name) noexcept;
23
31 InstanceBuilder& set_engine_version(uint32_t major, uint32_t minor, uint32_t patch) noexcept;
32
38 InstanceBuilder& set_app_name(std::string_view name) noexcept;
39
47 InstanceBuilder& set_app_version(uint32_t major, uint32_t minor, uint32_t patch) noexcept;
48
54 InstanceBuilder& enable_layer(std::string_view name);
55
61 InstanceBuilder& enable_extension(std::string_view name);
62
67
72
78 InstanceBuilder& set_debug_callback(PFN_vkDebugUtilsMessengerCallbackEXT callback) noexcept;
79
80private:
81 bool is_layer_available(std::string_view name) const;
82 bool is_extension_available(std::string_view name) const;
83
84 void enable_window_extensions();
85 void create_debug_messager(VkInstance instance);
86 void destroy_debug_messager(VkInstance instance);
87
88 VkApplicationInfo app_info_ = {};
89 VkInstanceCreateInfo instance_info_ = {};
90
91 VkDebugUtilsMessengerEXT debug_messenger_;
92
93 std::vector<const char*> enabled_layers_;
94 std::vector<const char*> enabled_extensions_;
95
96 std::vector<VkLayerProperties> available_layers_;
97 std::vector<VkExtensionProperties> available_extensions_;
98
99 struct
100 {
101 bool enable_validation_layers = false;
102
103 bool enable_debug_messager = false;
104 VkDebugUtilsMessageSeverityFlagsEXT debug_message_severity =
105 VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
106 VkDebugUtilsMessageTypeFlagsEXT debug_message_type = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |
107 VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |
108 VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
109 PFN_vkDebugUtilsMessengerCallbackEXT debug_message_callback = nullptr;
110 } info_;
111};
Definition: InstanceBuilder.h:11
InstanceBuilder & set_debug_callback(PFN_vkDebugUtilsMessengerCallbackEXT callback) noexcept
设置调试消息回调函数.
Definition: InstanceBuilder.cpp:152
InstanceBuilder & set_engine_version(uint32_t major, uint32_t minor, uint32_t patch) noexcept
设置引擎版本. (可选)
Definition: InstanceBuilder.cpp:108
InstanceBuilder & set_engine_name(std::string_view name) noexcept
设置引擎名称. (可选)
Definition: InstanceBuilder.cpp:102
InstanceBuilder & enable_extension(std::string_view name)
启用拓展.
Definition: InstanceBuilder.cpp:132
InstanceBuilder & enable_debug_messenger()
启用调试消息.
Definition: InstanceBuilder.cpp:145
InstanceBuilder & set_app_version(uint32_t major, uint32_t minor, uint32_t patch) noexcept
设置应用程序版本. (可选)
Definition: InstanceBuilder.cpp:120
InstanceBuilder & set_app_name(std::string_view name) noexcept
设置应用程序名称. (可选)
Definition: InstanceBuilder.cpp:114
InstanceBuilder & enable_validation_layers()
启用验证层.
InstanceBuilder & enable_layer(std::string_view name)
启用 Layer.
Definition: InstanceBuilder.cpp:126
Vulkan 实例.
Definition: VKInstance.h:12