Changed project back to C++

This commit is contained in:
Piotr Krygier committed 2022-10-05 15:51:19 +02:00
1 parent ce0c399810
commit e7b9d4a32f
15 files changed
+1181 -412

No files matched your search

+61 -73
View File
@@ -4,16 +4,24 @@
* @brief Error messages for Vulkan initializers
* @version 0.1
* @date 2022-05-13
*
*
* @copyright Copyright (c) 2022
*
*
*/
#ifndef LOCALE_VULKAN_H
#define LOCALE_VULKAN_H
#pragma once
#include <array>
#include <vector>
#include "localization.hpp"
namespace rse::locale::vulkan
{
#define vulkanErrorMesssages vulkanErrorMesssages_nolocale[SELECTED_LANGUAGE]
enum Errors
{
VULKAN_INTANCE_INIT_FAILED,
@@ -27,78 +35,58 @@ enum Errors
VULKAN_SURFACE_CREATION_FAILED,
VULKAN_SWAPCHAIN_CREATION_FAILED,
VULKAN_SWAPCHAIN_IMVIEW_CREATION_FAILED,
VULKAN_SHADER_UNABLE_TO_OPEN,
VULKAN_SHADER_UNABLE_TO_CREATE_SHADER,
VULKAN_PIPELAYOUT_CREATION_FAILED,
VULKAN_RENDERPASS_CREATION_FAILED,
VULKAN_GRAPHICSPIPELINE_CREATION_FAILED,
VULKAN_FRAMEBUFFERS_CREATION_FAILED,
VULKAN_RECORD_COMMAND_BUFFER_FAILED,
VULKAN_SYNCOBJCTS_CREATION_FAILED,
LAST_MESSAGE
};
const struct MessageString_t vulkanErrorMesssages[LAST_MESSAGE] =
{
{
38,
{/* VULKAN_INTANCE_INIT_FAILED */
"Vulkan instance initialization failed"
std::array<std::array<const char*, LAST_MESSAGE>, LAST_LANGUAGE> vulkanErrorMesssages_nolocale = {
{/* EN_US */
/* VULKAN_INTANCE_INIT_FAILED */
"Vulkan instance initialization failed",
/* VULKAN_NO_PHYSICAL_DEVICES */
"No physical graphical physical devices found in system",
/* VULKAN_NO_SUITABLE_PHYSICAL_DEVICES */
"No suitable physical device found",
/* VULKAN_QUEUE_NOT_SUPPORTED */
"Selected physical device does not support required queue capabilities",
/* VULKAN_FAILED_TO_CREATE_DEVICE */
"Failed to create logical device",
/* VULKAN_ALLOCATOR_CREATION_FAILED */
"Failed to create Vulkan Memory Allocator",
/* VULKAN_COMMAND_POOL_CREATION_FAILED */
"Failed to create command pool",
/* VULKAN_COMMAND_BUFFER_ALLOCATION_FAILED */
"Failed to allocate command buffers",
/* VULKAN_SURFACE_CREATION_FAILED */
"Failed to create window surface",
/* VULKAN_SWAPCHAIN_CREATION_FAILED */
"Failed to create swapchain",
/* VULKAN_SWAPCHAIN_IMVIEW_CREATION_FAILED */
"Failed to create swapchain image view",
/* VULKAN_SHADER_UNABLE_TO_OPEN */
"Failed to open a file containing shader code",
/* VULKAN_SHADER_UNABLE_TO_CREATE_SHADER */
"Failed to create a shader",
/* VULKAN_PIPELAYOUT_CREATION_FAILED */
"Failed to create pipeline layout",
/* VULKAN_RENDERPASS_CREATION_FAILED */
"Failed to create render pass",
/* VULKAN_GRAPHICSPIPELINE_CREATION_FAILED */
"Failed to create graphics pipeline",
/* VULKAN_FRAMEBUFFERS_CREATION_FAILED */
"Failed to create framebuffer",
/* VULKAN_RECORD_COMMAND_BUFFER_FAILED */
"Failed to record command buffer. Validate your commands.",
/* VULKAN_SYNCOBJCTS_CREATION_FAILED */
"Failed to create sync objects"
}
},
{
55,
{/* VULKAN_NO_PHYSICAL_DEVICES */
"No physical graphical physical devices found in system"
}
},
{
35,
{/* VULKAN_NO_SUITABLE_PHYSICAL_DEVICES */
"No suitable physical device found"
}
},
{
70,
{/* VULKAN_QUEUE_NOT_SUPPORTED */
"Selected physical device does not support required queue capabilities"
}
},
{
23,
{/* VULKAN_FAILED_TO_CREATE_DEVICE */
"Failed to create logical device"
}
},
{
41,
{/* VULKAN_ALLOCATOR_CREATION_FAILED */
"Failed to create Vulkan Memory Allocator"
}
},
{
30,
{/* VULKAN_COMMAND_POOL_CREATION_FAILED */
"Failed to create command pool"
}
},
{
35,
{/* VULKAN_COMMAND_BUFFER_ALLOCATION_FAILED */
"Failed to allocate command buffers"
}
},
{
32,
{/* VULKAN_SURFACE_CREATION_FAILED */
"Failed to create window surface"
}
},
{
27,
{/* VULKAN_SWAPCHAIN_CREATION_FAILED */
"Failed to create swapchain"
}
},
{
38,
{/* VULKAN_SWAPCHAIN_IMVIEW_CREATION_FAILED */
"Failed to create swapchain image view"
}
},
};
#endif
} // namespace rse::locale::vulkan
+21 -19
View File
@@ -9,7 +9,17 @@
*
*/
#include "localization.h"
#pragma once
#include <array>
#include "localization.hpp"
namespace rse::locale::window
{
#define windowErrorMesssages windowErrorMesssages_nolocale[SELECTED_LANGUAGE]
enum Errors
{
@@ -19,23 +29,15 @@ enum Errors
LAST_MESSAGE
};
const struct MessageString_t windowErrorMesssages[LAST_MESSAGE] =
{
{
17,
{/* WINDOW_GLFW_INIT_FAILED */
"GLFW init failed!"
std::array<std::array<const char*, LAST_LANGUAGE>, LAST_MESSAGE> windowErrorMesssages_nolocale = {
{/* EN_US */
/* WINDOW_GLFW_INIT_FAILED */
"GLFW init failed!"
/* WINDOW_VULKAN_NOT_SUPPORTED */
"Unable to load Vulkan"
/*WINDOW_NOT_CREATED*/
"Window context creation failed"
}
},
{
22,
{/* WINDOW_VULKAN_NOT_SUPPORTED */
"Unable to load Vulkan"
}
},
{
31,
{/*WINDOW_NOT_CREATED*/
"Window context creation failed"
}}
};
} // namespace rse::locale::window
+6 -29
View File
@@ -1,5 +1,5 @@
/**
* @file localization.h
* @file localization.hpp
* @author Piotr Krygier (everyonencancode@gmail.com)
* @brief Simple localization header
* @version 0.1
@@ -9,14 +9,11 @@
*
*/
#ifndef LOCALIZATION_H
#define LOCALIZATION_H
#pragma once
#define SELECTED_LANGUAGE rse::locale::EN_US
#include <stdlib.h>
#define SELECTED_LANGUAGE EN_US
#define LOCALIZE(string) string.message[SELECTED_LANGUAGE]
namespace rse::locale
{
/**
* @brief Available languages
@@ -28,24 +25,4 @@ enum Languages_t
LAST_LANGUAGE
};
/**
* @brief
*
*/
struct MessageString_t
{
/**
* @brief Maximum message length. I.e. if French version is longer than English, use French length.
*
*/
size_t maxMessageLength;
/**
*
* @brief Array holding list of translations for specific message
*
*/
const char* const message[LAST_LANGUAGE];
};
#endif /* LOCALIZATION_H */
} // namespace rse::locale
-90
View File
@@ -1,90 +0,0 @@
/**
* @file log.hxx
* @author Piotr Krygier (everyonencancode@gmail.com)
* @brief Logging interfaces
* @version 0.1
* @date 2022-02-11
*
* @copyright Copyright (c) 2022
*
*/
#ifndef LOG_H
#define LOG_H
#include <stdio.h>
/* Controls level of logging. TODO: Move this to cmake or some config */
#define LOG_LEVEL 6
#define LOG(level, ...) _LOG_##level(__VA_ARGS__)
#if LOG_LEVEL >= 1
#define _LOG_FATAL(...) __LOG(FATAL, __VA_ARGS__)
#else
#define _LOG_FATAL(...)
#endif
#if LOG_LEVEL >= 2
#define _LOG_ERROR(...) __LOG(ERROR, __VA_ARGS__)
#else
#define _LOG_ERROR(...)
#endif
#if LOG_LEVEL >= 3
#define _LOG_WARNING(...) __LOG(WARNING, __VA_ARGS__)
#else
#define _LOG_WARNING(...)
#endif
#if LOG_LEVEL >= 4
#define _LOG_INFO(...) __LOG(INFO, __VA_ARGS__)
#else
#define _LOG_INFO(...)
#endif
#if LOG_LEVEL >= 5
#define _LOG_DEBUG(...) __LOG(DEBUG, __VA_ARGS__)
#else
#define _LOG_DEBUG(...)
#endif
#if LOG_LEVEL >= 6
#define _LOG_TRACE(...) __LOG(TRACE, __VA_ARGS__)
#else
#define _LOG_TRACE(...)
#endif
/* Macro magic, that makes logging work. It's better than C++ solution anyway... */
#define _LOG_SIZEOF(...) __LOG_SIZEOF(__VA_ARGS__, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0)
#define __LOG_SIZEOF(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, N, \
...) \
N
#define _LOG_EVAL(x) x
#define __LOG(level, ...) ___LOG(_LOG_SIZEOF(__VA_ARGS__), level, __VA_ARGS__)
#define ___LOG(n, ...) ____LOG(n, __VA_ARGS__)
#define ____LOG(n, ...) ____LOG##n(__VA_ARGS__)
#define ____LOG1(level, format) \
fprintf(stdout, \
"[" #level \
"]" \
"\t%s:%d\t" format "\n", \
__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__, __LINE__)
#define ____LOG2(level, format, ...) \
fprintf(stdout, \
"[" #level \
"]" \
"\t%s:%d\t" format "\n", \
__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__, __LINE__, __VA_ARGS__)
typedef enum
{
TRACE = 1,
DEBUG = 2,
INFO = 3,
WARNING = 4,
ERROR = 5,
FATAL = 6
} LogLevel;
#endif /* LOG_H */
+73
View File
@@ -0,0 +1,73 @@
/**
* @file log.hpp
* @author Piotr Krygier (everyonencancode@gmail.com)
* @brief Logging interfaces
* @version 0.1
* @date 2022-02-11
*
* @copyright Copyright (c) 2022
*
*/
#pragma once
#include <sstream>
#ifndef LOG_LEVEL
#define LOG_LEVEL LOGLEVEL_WARNING
#endif
#define LOGT rse::log::Logger(rse::log::LOGLEVEL_TRACE)
#define LOGD rse::log::Logger(rse::log::LOGLEVEL_DEBUG)
#define LOGI rse::log::Logger(rse::log::LOGLEVEL_INFO)
#define LOGW rse::log::Logger(rse::log::LOGLEVEL_WARNING)
#define LOGE rse::log::Logger(rse::log::LOGLEVEL_ERROR)
#define LOGF rse::log::Logger(rse::log::LOGLEVEL_FATAL)
namespace rse::log
{
/**
* @brief Log level. Is not an enum class, because level is being compared to enable prints
*
*/
typedef enum
{
LOGLEVEL_TRACE = 1,
LOGLEVEL_DEBUG = 2,
LOGLEVEL_INFO = 3,
LOGLEVEL_WARNING = 4,
LOGLEVEL_ERROR = 5,
LOGLEVEL_FATAL = 6
} LogLevel;
/**
* @brief Class used indirectly as a logger.
*
*/
class Logger {
private:
std::stringstream mMessageBuffer;
public:
/**
* @brief Construct a new Logger object
*
*/
Logger(LogLevel);
~Logger();
/**
* @brief For log printing. I want it to work like log << "Message " << args;
*
*/
template <typename T>
Logger& operator<<(T&& message)
{
mMessageBuffer << message;
return *this;
}
};
} // namespace rse::log
+12 -6
View File
@@ -4,15 +4,21 @@
* @brief Vulkan wrapper functions used by other parts of Graphics component
* @version 0.1
* @date 2022-05-13
*
*
* @copyright Copyright (c) 2022
*
*
*/
#ifndef VULKAN_BASE_H
#define VULKAN_BASE_H
#pragma once
int initVulkan();
#include <cstdint>
namespace rse::graphics::vulkanbase
{
uint8_t initVulkan();
void deinitVulkan();
#endif /* VULKAN_BASE_H */
void drawFrame();
} /* namespace rse::graphics::vulkanbase */
+6 -4
View File
@@ -9,14 +9,16 @@
*
*/
#ifndef WINDOW_HANDLER_H
#define WINDOW_HANDLER_H
#pragma once
/* Vulkan header MUST be included before glfw */
#include <vulkan/vulkan.h>
/* Vulkan header MUST be included before glfw */
#include <GLFW/glfw3.h>
namespace rse::graphics::window
{
/**
* @brief Initialize window
*
@@ -42,4 +44,4 @@ void windowTerminate();
GLFWwindow* getWindowHandle();
#endif /* WINDOW_HANDLER_H */
} /* namespace rse::graphics::window */