为了使代码更加规范,且只在需要debug的时候添加validation layer,添加宏定义
BUILD_OPTIONS.h
#pragma once
#define BUILD_ENABLE_VULKAN_DEBUG 1
#define BUILD_ENABLE_VULKAN_RUNTIME_DEBUG 1
Render.cpp修改添加 #if define, 将debug函数包含进去
#include "Renderer.h"
Renderer::Renderer() {
_SetupDebug();
_InitInstance();
_InitDebug();
_InitDevice();
}
Renderer::~Renderer() {
_DeInitDevice();
_DeInitDebug();
_DeInitInstance();
}
Window* Renderer::OpenWindow(uint32_t size_x, uint32_t size_y, std::string name)
{
_window = new Window(size_x, size_y, name);
return nullptr;
}
bool Renderer::Run()
{
if (nullptr != _window) {
return _window->Update();
}
return true;
}
void Renderer::_InitInstance()
{
VkApplicationInfo application_info{
};
application_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
application_info.apiVersion = VK_API_VERSION_1_3;//tells driver api version
application_info.applicationVersion = VK_MAKE_VERSION(0, 1, 0);
application_info.pApplicationName = "Vulkan_tutorial_1";
VkInstanceCreateInfo instance_create_info{
};
instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
instance_create_info.pApplicationInfo = &application_info;
instance_create_info.enabledLayerCount = _instance_layers.size();
instance_create_info.ppEnabledLayerNames = _instance_layers.data();
instance_create_info.enabledExtensionCount = _instance_extensions.size();
instance_create_info.ppEnabledExtensionNames = _instance_extensions.data();
//instance_create_info.pNext = &debug_callback_create_info;// add loader message
//std::cout << "Vulkan Instance create error check" << std::endl;
ErrorCheck(vkCreateInstance(&instance_create_info, nullptr, &_Instance));
}
void Renderer::_DeInitInstance() {
vkDestroyInstance(_Instance, nullptr);
_Instance = nullptr;
}
void Renderer::_InitDevice()
{
// give the logical device used to render
{
uint32_t gpu_count = 0;
// return gpu_count
vkEnumeratePhysicalDevices(_Instance, &gpu_count, nullptr);
std::vector<VkPhysicalDevice> gpu_list(gpu_count);
// return the number of handles actually written to pPhysicalDevices
vkEnumeratePhysicalDevices(_Instance, &gpu_count, gpu_list.data());
_gpu = gpu_list[0];
// properties are returned
vkGetPhysicalDeviceProperties(_gpu, &_gpu_properties);
}
{
// get _graphics_family_index
// similarly query properties of queues available on a physical device
uint32_t family_count = 0;
vkGetPhysicalDeviceQueueFamilyProperties(_gpu, &family_count, nullptr);
std::vector<VkQueueFamilyProperties> family_property_list{
family_count };
vkGetPhysicalDeviceQueueFamilyProperties(_gpu, &family_count, family_property_list.data());
bool found = false;
for (uint32_t i = 0; i < family_count; ++i) {