zengine/engine/modules/render/vulkan/include/vkn/wrapper/instance_create.h
2024-08-23 22:13:05 +08:00

42 lines
1.3 KiB
C++

#pragma once
#include "vkn/type.h"
namespace vkn {
class InstanceCreator {
public:
pmr::string appName;
uint32_t appVersion;
pmr::string engineName;
uint32_t engineVersion;
uint32_t apiVersion;
pmr::vector<pmr::string> desiredExtensions;
pmr::vector<pmr::string> desiredLayers;
#ifdef Z_RENDER_DEBUG
VkDebugUtilsMessageSeverityFlagsEXT messageSeverity;
VkDebugUtilsMessageTypeFlagsEXT messageType;
PFN_vkDebugUtilsMessengerCallbackEXT debugCallback;
VkDebugUtilsMessengerCreateInfoEXT DebugUtilsLayerNext();
#endif
public:
InstanceCreator();
void AddExtension(string_view extensionName);
void AddLayer(string_view layerName);
void AddWindowExtension();
void AddInstanceExtension();
void AddDebugExtension();
pmr::vector<char const*> EnabledExtensionNames();
pmr::vector<char const*> EnabledLayerNames();
private:
static bool CheckAvailableInstanceExtensions(pmr::vector<VkExtensionProperties>& available_extensions);
static bool CheckAvailableInstanceLayers(pmr::vector<VkLayerProperties>& available_layers);
static bool IsExtensionSupported(pmr::vector<VkExtensionProperties> const& available_extensions,
char const* const extension);
static bool IsLayerSupported(pmr::vector<VkLayerProperties> const& available_layers,
char const* const layer);
};
};