Program Listing for File base.h
↰ Return to documentation for file (PrismEngine/src/base.h)
#pragma once
#include <optional>
#include <vector>
#include <stdexcept>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <unordered_set>
#include <vulkan/vulkan.h>
#include <SDL_vulkan.h>
#include "config.h"
#include "logger.h"
#include "utils.h"
#include "deviceWrapper.h"
#include "deviceRater.h"
namespace prism {
namespace PGC {
inline VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger) {
auto func = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT");
if (func != nullptr) {
return func(instance, pCreateInfo, pAllocator, pDebugMessenger);
}
else {
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
}
inline void DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, const VkAllocationCallbacks* pAllocator) {
auto func = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT");
if (func != nullptr) {
func(instance, debugMessenger, pAllocator);
}
}
namespace base
{
class Base
{
public:
Base() : context(nullptr), settings(nullptr) {}
void init(PGC::utils::Context* context, PGC::utils::Settings* settings);
~Base();
void cleanup();
private:
void create();
void createInstance();
void setupDebugMessenger();
void pickPhysicalDevice();
void createSurface();
void createLogicalDevice();
PGC::utils::Context* context;
PGC::utils::Settings* settings;
//help
bool checkValidationLayerSupport();
std::vector<const char*> getRequiredExtensions();
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo);
static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData);
VkSampleCountFlagBits getMaxUsableSampleCount();
std::vector<VkSampleCountFlagBits> getPossibleCounts(VkSampleCountFlagBits maxCount);
VkSampleCountFlagBits getMsaaSamples();
VkDebugUtilsMessengerEXT debugMessenger;
};
}
}
}