CONGE-2 Added better login in Demo1 and added error handling in VulkanContext.cpp
This commit is contained in:
parent
829c7b5c52
commit
15f8898808
@ -15,13 +15,32 @@ namespace ConjureEngine {
|
||||
|
||||
void VulkanContext::AttachTo(SDL_Window* window, const VkApplicationInfo& appInfo)
|
||||
{
|
||||
// LOAD THE EXTENSIONS
|
||||
SDL_Vulkan_GetInstanceExtensions(window, &m_extensionCount, nullptr);
|
||||
// LOAD THE EXTENSIONS
|
||||
SDL_bool sdlSuccess;
|
||||
VkResult vk_result;
|
||||
|
||||
// FETCH NUMBER OF EXTENSIONS TO RESERVE SPACE IN VECTOR
|
||||
sdlSuccess = SDL_Vulkan_GetInstanceExtensions(window, &m_extensionCount, nullptr);
|
||||
if(sdlSuccess != SDL_TRUE)
|
||||
{
|
||||
SDL_LogError(SDL_LOG_CATEGORY_SYSTEM, "Error Getting Extensions: %s", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
m_extensionNames.reserve(m_extensionCount);
|
||||
SDL_Vulkan_GetInstanceExtensions(window, &m_extensionCount, m_extensionNames.data());
|
||||
|
||||
// FILLING UP THE VECTOR
|
||||
sdlSuccess = SDL_Vulkan_GetInstanceExtensions(window, &m_extensionCount, m_extensionNames.data());
|
||||
if(sdlSuccess != SDL_TRUE)
|
||||
{
|
||||
SDL_LogError(SDL_LOG_CATEGORY_SYSTEM, "Error Getting Extensions: %s", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
SDL_LogDebug(SDL_LOG_CATEGORY_SYSTEM,"FETCHING OF EXTENSION FINISHED SUCCESSFULLY");
|
||||
}
|
||||
|
||||
// Fill the instance create info using appInfo
|
||||
// Fill the instance create info struct using appInfo
|
||||
VkInstanceCreateInfo vulkanInfos{};
|
||||
vulkanInfos.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
|
||||
vulkanInfos.pApplicationInfo = &appInfo;
|
||||
@ -29,26 +48,57 @@ namespace ConjureEngine {
|
||||
// ENABLE THE REQUIRED EXTENSIONS
|
||||
this->EnableGlobalExtentions(window, vulkanInfos);
|
||||
|
||||
// CREATE VULKAN INSTANCE
|
||||
vkCreateInstance(&vulkanInfos, nullptr, &m_vkInst);
|
||||
// CREATE THE VULKAN INSTANCE
|
||||
vk_result = vkCreateInstance(&vulkanInfos, nullptr, &m_vkInst);
|
||||
if(vk_result != VkResult::VK_SUCCESS) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_SYSTEM, "Error while creating the device: CODE = %d", static_cast<int>(vk_result));
|
||||
exit(1);
|
||||
}
|
||||
else {
|
||||
SDL_LogDebug(SDL_LOG_CATEGORY_SYSTEM,"VULKAN INSTANCE CREATED SUCCESSFULLY");
|
||||
}
|
||||
|
||||
// LOAD THE PHYSICAL DEVICES (GPUs)
|
||||
vkEnumeratePhysicalDevices(m_vkInst, &m_physicalDeviceCount, nullptr);
|
||||
// FETCH THE NUMBER OF PHYSICAL DEVICES (GPUs) TO RESERVE SPACE INTHE VECTOR
|
||||
vk_result = vkEnumeratePhysicalDevices(m_vkInst, &m_physicalDeviceCount, nullptr);
|
||||
if(vk_result != VkResult::VK_SUCCESS) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_SYSTEM, "Error while enumerating physical devices: CODE = %d", static_cast<int>(vk_result));
|
||||
exit(1);
|
||||
}
|
||||
m_physicalDevices = std::vector<VkPhysicalDevice>(m_physicalDeviceCount);
|
||||
vkEnumeratePhysicalDevices(m_vkInst, &m_physicalDeviceCount, m_physicalDevices.data());
|
||||
|
||||
// SELECT THE MAIN GPU (WE COULD HAVE A SMARTER SELECTION LATER)
|
||||
// FILL THE VECTOR WITH ACTUAL DEVICES DATA
|
||||
vk_result = vkEnumeratePhysicalDevices(m_vkInst, &m_physicalDeviceCount, m_physicalDevices.data());
|
||||
if(vk_result != VkResult::VK_SUCCESS) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_SYSTEM, "Error while enumerating physical devices: CODE = %d", static_cast<int>(vk_result));
|
||||
exit(1);
|
||||
}
|
||||
else {
|
||||
SDL_LogDebug(SDL_LOG_CATEGORY_SYSTEM, "VULKAN ENUMERATION OF PHYSICAL DEVICES FINISHED SUCCESSFULLY");
|
||||
}
|
||||
|
||||
// SELECT THE MAIN GPU (WE COULD HAVE A SMARTER SELECTION LATER. FOR NOW, WE SELECT THE FIRST ONE WE SEE)
|
||||
m_selectedPhysicalDevice = m_physicalDevices[0];
|
||||
|
||||
// LOAD THE FAMILLY QUEUE PROPERTIES
|
||||
// FETCH THE QUANTITY OF FAMILY QUEUE TO RESERVE SPACE IN THE VECTOR
|
||||
vkGetPhysicalDeviceQueueFamilyProperties(m_selectedPhysicalDevice, &m_queueFamilyCount, nullptr);
|
||||
std::vector<VkQueueFamilyProperties> queueFamilies(m_queueFamilyCount);
|
||||
|
||||
// FILL THE VECTOR WITH ACTUAL QUEUE DATA
|
||||
vkGetPhysicalDeviceQueueFamilyProperties(m_selectedPhysicalDevice, &m_queueFamilyCount, queueFamilies.data());
|
||||
|
||||
// CREATE THE SURFACE FOR RENDERING
|
||||
SDL_Vulkan_CreateSurface(window, m_vkInst, &m_surface);
|
||||
sdlSuccess = SDL_Vulkan_CreateSurface(window, m_vkInst, &m_surface);
|
||||
if(sdlSuccess != SDL_TRUE)
|
||||
{
|
||||
SDL_LogError(SDL_LOG_CATEGORY_SYSTEM, "Error Getting Extensions: %s", SDL_GetError());
|
||||
exit(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
SDL_LogDebug(SDL_LOG_CATEGORY_SYSTEM, "VULKAN SURFACE CREATED SUCCESSFULLY");
|
||||
}
|
||||
|
||||
// ???
|
||||
// NOT SURE WHAT THIS DOES YET, WILL CHECK IN THE TUTORIAL
|
||||
uint32_t graphicsQueueIndex = UINT32_MAX;
|
||||
uint32_t presentQueueIndex = UINT32_MAX;
|
||||
VkBool32 support;
|
||||
@ -58,7 +108,11 @@ namespace ConjureEngine {
|
||||
VK_QUEUE_GRAPHICS_BIT)
|
||||
graphicsQueueIndex = i;
|
||||
if (presentQueueIndex == UINT32_MAX) {
|
||||
vkGetPhysicalDeviceSurfaceSupportKHR(m_selectedPhysicalDevice, i, m_surface, &support);
|
||||
vk_result = vkGetPhysicalDeviceSurfaceSupportKHR(m_selectedPhysicalDevice, i, m_surface, &support);
|
||||
if(vk_result != VkResult::VK_SUCCESS) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_SYSTEM, "Error while checking the surface capability: CODE = %d", static_cast<int>(vk_result));
|
||||
}
|
||||
|
||||
if (support)
|
||||
presentQueueIndex = i;
|
||||
}
|
||||
@ -94,12 +148,13 @@ namespace ConjureEngine {
|
||||
|
||||
|
||||
// CREATE VIRTUAL DEVICE FOR RENDERING
|
||||
VkResult result = vkCreateDevice(m_selectedPhysicalDevice, &m_deviceCreateInfo, nullptr, &m_device);
|
||||
if(result != VkResult::VK_SUCCESS) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Error while creating the device: %d", static_cast<int>(result));
|
||||
vk_result = vkCreateDevice(m_selectedPhysicalDevice, &m_deviceCreateInfo, nullptr, &m_device);
|
||||
if(vk_result != VkResult::VK_SUCCESS) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Error while creating the device: %d", static_cast<int>(vk_result));
|
||||
exit(1);
|
||||
}
|
||||
else {
|
||||
SDL_Log("DEVICE CREATED SUCCESSFULLY");
|
||||
SDL_LogDebug(SDL_LOG_CATEGORY_SYSTEM, "DEVICE CREATED SUCCESSFULLY");
|
||||
}
|
||||
|
||||
vkGetDeviceQueue(m_device, graphicsQueueIndex, 0, &m_graphicQueue);
|
||||
|
||||
@ -19,7 +19,11 @@ namespace ConjureEngine {
|
||||
SDL_Vulkan_UnloadLibrary();
|
||||
SDL_Quit();
|
||||
|
||||
SDL_Log("Cleaned up with errors: %s", SDL_GetError());
|
||||
std::string error = SDL_GetError();
|
||||
if(!error.empty())
|
||||
{
|
||||
SDL_Log("Cleaned up with errors: %s", error);
|
||||
}
|
||||
}
|
||||
|
||||
SDL_Window* Window::GetWindow() const
|
||||
|
||||
@ -21,22 +21,22 @@ namespace Demo1 {
|
||||
|
||||
void Demo1::Awake()
|
||||
{
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,"[DEMO1 - TRACE] - AWAKING");
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,"AWAKING");
|
||||
}
|
||||
|
||||
void Demo1::Start()
|
||||
{
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,"[DEMO1 - TRACE] - STARTING");
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,"STARTING");
|
||||
}
|
||||
|
||||
void Demo1::Tick(double deltaTime)
|
||||
{
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "[DEMO1 - TRACE] - TICKING %f", deltaTime);
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "TICKING %f", deltaTime);
|
||||
}
|
||||
|
||||
void Demo1::Destroy()
|
||||
{
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,"[DEMO1 - TRACE] - DESTROYING");
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,"DESTROYING");
|
||||
}
|
||||
|
||||
} // Demo1
|
||||
|
||||
@ -1,14 +1,94 @@
|
||||
#define SDL_MAIN_HANDLED
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
||||
#include "Demo1.h"
|
||||
|
||||
static std::ofstream logFile;
|
||||
|
||||
void OutputLog(void *userdata, int category, SDL_LogPriority priority, const char *message)
|
||||
{
|
||||
(void)userdata;
|
||||
|
||||
std::string categoryString;
|
||||
switch (category)
|
||||
{
|
||||
case SDL_LOG_CATEGORY_APPLICATION:
|
||||
categoryString = "Application";
|
||||
break;
|
||||
case SDL_LOG_CATEGORY_ERROR:
|
||||
categoryString = "Error";
|
||||
break;
|
||||
case SDL_LOG_CATEGORY_ASSERT:
|
||||
categoryString = "Assert";
|
||||
break;
|
||||
case SDL_LOG_CATEGORY_SYSTEM:
|
||||
categoryString = "System";
|
||||
break;
|
||||
case SDL_LOG_CATEGORY_AUDIO:
|
||||
categoryString = "Audio";
|
||||
break;
|
||||
case SDL_LOG_CATEGORY_VIDEO:
|
||||
categoryString = "Video";
|
||||
break;
|
||||
case SDL_LOG_CATEGORY_RENDER:
|
||||
categoryString = "Render";
|
||||
break;
|
||||
case SDL_LOG_CATEGORY_INPUT:
|
||||
categoryString = "Input";
|
||||
break;
|
||||
case SDL_LOG_CATEGORY_TEST:
|
||||
categoryString = "Test";
|
||||
break;
|
||||
default:
|
||||
categoryString = "";
|
||||
break;
|
||||
}
|
||||
|
||||
std::string priorityString;
|
||||
switch (priority)
|
||||
{
|
||||
case SDL_LOG_PRIORITY_VERBOSE:
|
||||
priorityString = "VERBOSE";
|
||||
break;
|
||||
case SDL_LOG_PRIORITY_DEBUG:
|
||||
priorityString = "DEBUG";
|
||||
break;
|
||||
case SDL_LOG_PRIORITY_INFO:
|
||||
priorityString = "INFO";
|
||||
break;
|
||||
case SDL_LOG_PRIORITY_WARN:
|
||||
priorityString = "WARN";
|
||||
break;
|
||||
case SDL_LOG_PRIORITY_ERROR:
|
||||
priorityString = "ERROR";
|
||||
break;
|
||||
case SDL_LOG_PRIORITY_CRITICAL:
|
||||
priorityString = "CRITICAL";
|
||||
break;
|
||||
default:
|
||||
std::cout << message << "\n";
|
||||
break;
|
||||
}
|
||||
|
||||
logFile << "[" << categoryString << " - " << priorityString << "] " << message << "\n";
|
||||
std::cout << "[" << categoryString << " - " << priorityString << "] " << message << "\n";
|
||||
}
|
||||
|
||||
int main ( int argc, char* argv[] )
|
||||
{
|
||||
logFile = std::ofstream{"log.txt"};
|
||||
SDL_SetMainReady();
|
||||
|
||||
SDL_LogSetAllPriority(SDL_LOG_PRIORITY_VERBOSE);
|
||||
SDL_LogSetOutputFunction(&OutputLog, nullptr);
|
||||
|
||||
// I WANT TO CREATE AN APP
|
||||
Demo1::Demo1 app;
|
||||
|
||||
// AND THEN START IT
|
||||
return app.Run();
|
||||
int status = app.Run();
|
||||
|
||||
return status;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user