Initial Commit
This commit is contained in:
commit
ce5fd7e93d
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# Project exclude paths
|
||||
/cmake-build-debug/
|
||||
/out/build/x64-debug/
|
||||
/.vs/
|
||||
/.idea/
|
||||
16
CMakeLists.txt
Normal file
16
CMakeLists.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# CMakeList.txt : Top-level CMake project file, do global configuration
|
||||
# and include sub-projects here.
|
||||
#
|
||||
cmake_minimum_required (VERSION 3.8)
|
||||
|
||||
# Enable Hot Reload for MSVC compilers if supported.
|
||||
if (POLICY CMP0141)
|
||||
cmake_policy(SET CMP0141 NEW)
|
||||
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
|
||||
endif()
|
||||
|
||||
project ("Nitric")
|
||||
|
||||
# Include sub-projects.
|
||||
add_subdirectory ("Nitric")
|
||||
add_subdirectory ("NitricEngine")
|
||||
61
CMakePresets.json
Normal file
61
CMakePresets.json
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"version": 3,
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "windows-base",
|
||||
"hidden": true,
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/out/build/${presetName}",
|
||||
"installDir": "${sourceDir}/out/install/${presetName}",
|
||||
"cacheVariables": {
|
||||
"CMAKE_C_COMPILER": "cl.exe",
|
||||
"CMAKE_CXX_COMPILER": "cl.exe"
|
||||
},
|
||||
"condition": {
|
||||
"type": "equals",
|
||||
"lhs": "${hostSystemName}",
|
||||
"rhs": "Windows"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "x64-debug",
|
||||
"displayName": "x64 Debug",
|
||||
"inherits": "windows-base",
|
||||
"architecture": {
|
||||
"value": "x64",
|
||||
"strategy": "external"
|
||||
},
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Debug"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "x64-release",
|
||||
"displayName": "x64 Release",
|
||||
"inherits": "x64-debug",
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Release"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "x86-debug",
|
||||
"displayName": "x86 Debug",
|
||||
"inherits": "windows-base",
|
||||
"architecture": {
|
||||
"value": "x86",
|
||||
"strategy": "external"
|
||||
},
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Debug"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "x86-release",
|
||||
"displayName": "x86 Release",
|
||||
"inherits": "x86-debug",
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Release"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
26
Nitric/CMakeLists.txt
Normal file
26
Nitric/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# CMakeList.txt : CMake project for Vengine, include source and define
|
||||
# project specific logic here.
|
||||
#
|
||||
|
||||
# Add source to this project's executable.
|
||||
file(GLOB_RECURSE SourceFiles "${CMAKE_CURRENT_SOURCE_DIR}/Source/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/Source/*.h")
|
||||
|
||||
find_package(spdlog CONFIG REQUIRED)
|
||||
find_package(Vulkan REQUIRED)
|
||||
find_package(glm CONFIG REQUIRED)
|
||||
|
||||
add_library (Nitric STATIC ${SourceFiles})
|
||||
|
||||
target_link_libraries(Nitric PRIVATE glm::glm)
|
||||
target_link_libraries(Nitric PRIVATE spdlog::spdlog)
|
||||
target_link_libraries(Nitric PRIVATE Vulkan::Vulkan)
|
||||
target_include_directories(Nitric PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/Source")
|
||||
|
||||
set(NITRIC_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Nitric.lib")
|
||||
set(NITRIC_HEADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Source")
|
||||
|
||||
if (CMAKE_VERSION VERSION_GREATER 3.12)
|
||||
set_property(TARGET Nitric PROPERTY CXX_STANDARD 20)
|
||||
endif()
|
||||
|
||||
# TODO: Add tests and install targets if needed.
|
||||
11
Nitric/Source/Core/Application.cpp
Normal file
11
Nitric/Source/Core/Application.cpp
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
#include <Core/Application.h>
|
||||
|
||||
namespace Nitric {
|
||||
Application::Application(const ApplicationSettings& settings) {
|
||||
|
||||
}
|
||||
|
||||
void Application::Run() {
|
||||
|
||||
}
|
||||
}
|
||||
28
Nitric/Source/Core/Application.h
Normal file
28
Nitric/Source/Core/Application.h
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
#include <Render/GraphicsContext.h>
|
||||
#include <Core/Window.h>
|
||||
|
||||
namespace Nitric {
|
||||
|
||||
struct ApplicationSettings {
|
||||
uint32_t Width;
|
||||
uint32_t Height;
|
||||
std::string Title;
|
||||
};
|
||||
|
||||
class Application {
|
||||
public:
|
||||
explicit Application(const ApplicationSettings& settings);
|
||||
|
||||
void Run();
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
static Application* CreateApplication();
|
||||
}
|
||||
30
Nitric/Source/Core/Base.h
Normal file
30
Nitric/Source/Core/Base.h
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#define NITRIC_VERSION(major, minor, patch) (major << 16) + (minor << 8) + patch
|
||||
|
||||
namespace Nitric {
|
||||
template <typename T>
|
||||
using Ref = std::shared_ptr<T>;
|
||||
|
||||
template <typename T, typename... Args>
|
||||
Ref<T> CreateRef(Args&&... args) {
|
||||
return std::make_shared<T>(std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
using Scope = std::unique_ptr<T>;
|
||||
|
||||
template <typename T, typename... Args>
|
||||
Scope<T> CreateScope(Args&&... args) {
|
||||
return std::make_unique<T>(std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template <typename T, typename A>
|
||||
Ref<T> CastPtr(A in) {
|
||||
return std::dynamic_pointer_cast<T>(in);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
18
Nitric/Source/Core/EntryPoint.h
Normal file
18
Nitric/Source/Core/EntryPoint.h
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#pragma once
|
||||
|
||||
#include <Core/Application.h>
|
||||
#include <Core/LogInternal.h>
|
||||
#include <spdlog/spdlog.h>
|
||||
|
||||
extern Nitric::Application* Nitric::CreateApplication();
|
||||
|
||||
#ifdef WIN32
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
Nitric::LogInternal::Init();
|
||||
Nitric::LogInternal::Info("Starting Nitric Engine");
|
||||
Nitric::LogInternal::Info("Creating Nitric Application");
|
||||
auto application = Nitric::CreateApplication();
|
||||
|
||||
}
|
||||
#endif
|
||||
13
Nitric/Source/Core/LogInternal.cpp
Normal file
13
Nitric/Source/Core/LogInternal.cpp
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#include <Core/LogInternal.h>
|
||||
|
||||
namespace Nitric {
|
||||
Ref<spdlog::logger> LogInternal::s_Logger;
|
||||
|
||||
void LogInternal::Init() {
|
||||
s_Logger = spdlog::stdout_color_mt("Nitric Internal");
|
||||
}
|
||||
|
||||
Ref<spdlog::logger> LogInternal::Get() {
|
||||
return s_Logger;
|
||||
}
|
||||
}
|
||||
77
Nitric/Source/Core/LogInternal.h
Normal file
77
Nitric/Source/Core/LogInternal.h
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
#pragma once
|
||||
|
||||
#include <Core/Base.h>
|
||||
#include <Render/GraphicsAPI.h>
|
||||
|
||||
#include <spdlog/spdlog.h>
|
||||
#include <spdlog/sinks/stdout_color_sinks.h>
|
||||
|
||||
namespace Nitric {
|
||||
class LogInternal {
|
||||
public:
|
||||
static void Init();
|
||||
|
||||
template <typename T>
|
||||
static void Debug(T& msg) {
|
||||
Get()->debug(msg);
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
static void Debug(spdlog::format_string_t<Args...> fmt, Args &&...args)
|
||||
{
|
||||
Debug(fmt::format(fmt, std::forward(args)...));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static void Info(T& msg) {
|
||||
Get()->info(msg);
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
static void Info(spdlog::format_string_t<Args...> fmt, Args &&...args)
|
||||
{
|
||||
Info(fmt::format(fmt, std::forward(args)...));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static void Critical(T& msg) {
|
||||
Get()->critical(msg);
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
static void Critical(spdlog::format_string_t<Args...> fmt, Args &&...args)
|
||||
{
|
||||
Critical(fmt::format(fmt, std::forward(args)...));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static void Fatal(T& msg) {
|
||||
LogInternal::Error("The next error is fatal. This will terminate the program");
|
||||
Get()->log(spdlog::level::from_str("fatal"), msg);
|
||||
auto api = GraphicsAPI::APIToString(GraphicsAPI::GetAPI());
|
||||
Info("GraphicsAPI is set to {}", api);
|
||||
throw std::runtime_error(msg);
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
static void Fatal(spdlog::format_string_t<Args...> fmt, Args &&...args)
|
||||
{
|
||||
Fatal(fmt::format(fmt, std::forward(args)...));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static void Error(T& msg) {
|
||||
Get()->error(msg);
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
static void Error(spdlog::format_string_t<Args...> fmt, Args &&...args)
|
||||
{
|
||||
Error(fmt::format(fmt, std::forward(args)...));
|
||||
}
|
||||
|
||||
private:
|
||||
static Ref<spdlog::logger> s_Logger;
|
||||
static Ref<spdlog::logger> Get();
|
||||
};
|
||||
}
|
||||
20
Nitric/Source/Core/Window.h
Normal file
20
Nitric/Source/Core/Window.h
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#pragma once
|
||||
|
||||
#include <Core/Base.h>
|
||||
|
||||
#include <string>
|
||||
#include <cstdint>
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
namespace Nitric {
|
||||
struct WindowProperties {
|
||||
uint32_t Width;
|
||||
uint32_t Height;
|
||||
std::string Title;
|
||||
};
|
||||
class Window {
|
||||
public:
|
||||
virtual void SetSize(const glm::vec2& size) = 0;
|
||||
virtual glm::vec2 GetSize() const = 0;
|
||||
};
|
||||
}
|
||||
29
Nitric/Source/Platform/Vulkan/VkBase.h
Normal file
29
Nitric/Source/Platform/Vulkan/VkBase.h
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#pragma once
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
#include <vulkan/vk_enum_string_helper.h>
|
||||
#include <Core/LogInternal.h>
|
||||
|
||||
namespace Nitric {
|
||||
#ifdef NDEBUG
|
||||
const bool VkValidationLayersEnabled = false;
|
||||
#else
|
||||
const bool VkValidationLayersEnabled = true;
|
||||
#endif
|
||||
|
||||
namespace Vk {
|
||||
template <typename ...Args>
|
||||
void Validate(VkResult result, bool fatal, spdlog::format_string_t<Args...> fmt, Args &&...args) {
|
||||
if (result != VK_SUCCESS) {
|
||||
auto error = string_VkResult(result);
|
||||
if (fatal) {
|
||||
LogInternal::Fatal("({}) -> {}", error, fmt::format(fmt, std::forward<Args>(args)...))
|
||||
} else {
|
||||
LogInternal::Error("({}) -> {}", error, fmt::format(fmt, std::forward<Args>(args)...))
|
||||
}
|
||||
} else {
|
||||
LogInternal::Debug("Vk::Validate success.")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
75
Nitric/Source/Platform/Vulkan/VkGraphicsContext.cpp
Normal file
75
Nitric/Source/Platform/Vulkan/VkGraphicsContext.cpp
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
#include <Platform/Vulkan/VkGraphicsContext.h>
|
||||
|
||||
#include <utility>
|
||||
|
||||
namespace Nitric {
|
||||
|
||||
VkGraphicsContext::VkGraphicsContext(Ref<VkWindow> window) {
|
||||
m_Window = window;
|
||||
}
|
||||
|
||||
void VkGraphicsContext::Init() {
|
||||
this->CreateInstance();
|
||||
}
|
||||
|
||||
void VkGraphicsContext::CreateInstance() {
|
||||
if (!CheckValidationLayerSupport() && VkValidationLayersEnabled) {
|
||||
|
||||
}
|
||||
VkApplicationInfo appInfo{};
|
||||
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
|
||||
appInfo.pNext = nullptr;
|
||||
appInfo.pApplicationName = "Nitric";
|
||||
appInfo.applicationVersion = NITRIC_VERSION(1, 0, 0);
|
||||
appInfo.pEngineName = "Nitric Engine";
|
||||
appInfo.engineVersion = NITRIC_VERSION(1, 0, 0);
|
||||
appInfo.apiVersion = VK_API_VERSION_1_3;
|
||||
|
||||
VkInstanceCreateInfo createInfo{};
|
||||
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
|
||||
createInfo.pApplicationInfo = &appInfo;
|
||||
|
||||
auto windowExtensions = this->m_Window->GetExtensions();
|
||||
createInfo.enabledExtensionCount = static_cast<uint32_t>(windowExtensions.size());
|
||||
createInfo.ppEnabledExtensionNames = windowExtensions.data();
|
||||
|
||||
if (VkValidationLayersEnabled) {
|
||||
createInfo.enabledLayerCount = static_cast<uint32_t>(s_ValidationLayers.size());
|
||||
createInfo.ppEnabledLayerNames = s_ValidationLayers.data();
|
||||
} else {
|
||||
createInfo.enabledLayerCount = 0;
|
||||
createInfo.ppEnabledLayerNames = nullptr;
|
||||
}
|
||||
|
||||
Vk::Validate(vkCreateInstance(&createInfo, nullptr, &m_Instance), true, "VkInstance VkGraphicsContext::m_Instance failed on creation.")
|
||||
}
|
||||
|
||||
|
||||
bool VkGraphicsContext::CheckValidationLayerSupport() {
|
||||
uint32_t layerCount;
|
||||
vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
|
||||
|
||||
std::vector<VkLayerProperties> layerProperties(layerCount);
|
||||
vkEnumerateInstanceLayerProperties(&layerCount, layerProperties.data());
|
||||
|
||||
for (auto validationLayer : s_ValidationLayers) {
|
||||
bool layerFound = false;
|
||||
for (auto layerProperty : layerProperties) {
|
||||
if (strcmp(layerProperty.layerName, validationLayer) == 0) {
|
||||
layerFound = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!layerFound) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
std::vector<const char*> VkGraphicsContext::s_ValidationLayers = {
|
||||
"VK_LAYER_KHRONOS_validation"
|
||||
};
|
||||
|
||||
VkGraphicsContext::~VkGraphicsContext() = default;
|
||||
}
|
||||
28
Nitric/Source/Platform/Vulkan/VkGraphicsContext.h
Normal file
28
Nitric/Source/Platform/Vulkan/VkGraphicsContext.h
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#pragma once
|
||||
|
||||
#include <Render/GraphicsContext.h>
|
||||
#include <Core/Base.h>
|
||||
#include <Platform/Vulkan/VkWindow.h>
|
||||
#include <Platform/Vulkan/VkBase.h>
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
namespace Nitric {
|
||||
class VkGraphicsContext : public GraphicsContext {
|
||||
public:
|
||||
explicit VkGraphicsContext(Ref<VkWindow> window);
|
||||
~VkGraphicsContext();
|
||||
|
||||
void Init() override;
|
||||
|
||||
private:
|
||||
void CreateInstance();
|
||||
|
||||
static bool CheckValidationLayerSupport();
|
||||
static std::vector<const char*> s_ValidationLayers;
|
||||
|
||||
Ref<VkWindow> m_Window;
|
||||
|
||||
VkInstance m_Instance{};
|
||||
};
|
||||
}
|
||||
18
Nitric/Source/Platform/Vulkan/VkWindow.cpp
Normal file
18
Nitric/Source/Platform/Vulkan/VkWindow.cpp
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#include <Platform/Vulkan/VkWindow.h>
|
||||
|
||||
namespace Nitric {
|
||||
VkWindow::VkWindow(const WindowProperties& properties) {
|
||||
|
||||
}
|
||||
|
||||
std::vector<const char *> VkWindow::GetExtensions() {
|
||||
uint32_t extensionCount;
|
||||
auto extensions = glfwGetRequiredInstanceExtensions(&extensionCount);
|
||||
std::vector<const char*> returnExt(extensionCount);
|
||||
for (int i = 0; i < extensionCount; i++) {
|
||||
returnExt.push_back(extensions[i]);
|
||||
}
|
||||
return returnExt;
|
||||
}
|
||||
}
|
||||
|
||||
16
Nitric/Source/Platform/Vulkan/VkWindow.h
Normal file
16
Nitric/Source/Platform/Vulkan/VkWindow.h
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#pragma once
|
||||
|
||||
#include <Core/Window.h>
|
||||
|
||||
#include <vector>
|
||||
#define GLFW_INCLUDE_VULKAN
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
namespace Nitric {
|
||||
class VkWindow : public Window {
|
||||
public:
|
||||
explicit VkWindow(const WindowProperties& properties);
|
||||
|
||||
virtual std::vector<const char*> GetExtensions() = 0;
|
||||
};
|
||||
}
|
||||
17
Nitric/Source/Render/GraphicsAPI.cpp
Normal file
17
Nitric/Source/Render/GraphicsAPI.cpp
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#include "GraphicsAPI.h"
|
||||
|
||||
namespace Nitric {
|
||||
GraphicsAPI::API GraphicsAPI::s_API = None;
|
||||
|
||||
void GraphicsAPI::SetAPI(API api) {
|
||||
s_API = api;
|
||||
}
|
||||
|
||||
GraphicsAPI::API GraphicsAPI::GetAPI() {
|
||||
if (s_API == None) {
|
||||
spdlog::critical("Graphics API requested but not set. Failing here.");
|
||||
throw std::runtime_error("GraphicsAPI = None;");
|
||||
}
|
||||
return s_API;
|
||||
}
|
||||
}
|
||||
30
Nitric/Source/Render/GraphicsAPI.h
Normal file
30
Nitric/Source/Render/GraphicsAPI.h
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
#include <spdlog/spdlog.h>
|
||||
|
||||
namespace Nitric {
|
||||
|
||||
class GraphicsAPI {
|
||||
public:
|
||||
enum API {
|
||||
Vulkan,
|
||||
None
|
||||
};
|
||||
|
||||
static inline std::string& APIToString(API api) {
|
||||
switch (api) {
|
||||
case Vulkan:
|
||||
return "Vulkan";
|
||||
default:
|
||||
return "None";
|
||||
}
|
||||
}
|
||||
|
||||
static void SetAPI(API api);
|
||||
static API GetAPI();
|
||||
|
||||
private:
|
||||
static API s_API;
|
||||
};
|
||||
|
||||
}
|
||||
11
Nitric/Source/Render/GraphicsContext.h
Normal file
11
Nitric/Source/Render/GraphicsContext.h
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
namespace Nitric {
|
||||
|
||||
class GraphicsContext {
|
||||
public:
|
||||
|
||||
virtual void Init() = 0;
|
||||
};
|
||||
|
||||
}
|
||||
6
Nitric/Source/Render/Shader.cpp
Normal file
6
Nitric/Source/Render/Shader.cpp
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#include <Render/Shader.h>
|
||||
|
||||
namespace Nitric {
|
||||
|
||||
|
||||
}
|
||||
30
Nitric/Source/Render/Shader.h
Normal file
30
Nitric/Source/Render/Shader.h
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
#include <Core/Base.h>
|
||||
#include "GraphicsAPI.h"
|
||||
|
||||
namespace Nitric {
|
||||
class Shader {
|
||||
public:
|
||||
virtual ~Shader() = 0;
|
||||
|
||||
virtual uint64_t GetHash() = 0;
|
||||
virtual void Bind() = 0; // TODO: Bind(GraphicsPipeline);
|
||||
|
||||
static Ref<Shader> Create(const std::string& filepath);
|
||||
};
|
||||
|
||||
class ShaderCache {
|
||||
public:
|
||||
static bool IsPresent(uint64_t hash);
|
||||
static Ref<Shader> GetShader(uint64_t hash);
|
||||
static void AddShader(Ref<Shader> shader);
|
||||
|
||||
private:
|
||||
static std::map<uint64_t, Ref<Shader>> s_Shaders;
|
||||
};
|
||||
}
|
||||
24
NitricEngine/CMakeLists.txt
Normal file
24
NitricEngine/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
# CMakeList.txt : CMake project for Vengine, include source and define
|
||||
# project specific logic here.
|
||||
#
|
||||
|
||||
# Add source to this project's executable.
|
||||
file(GLOB_RECURSE SourceFiles "${CMAKE_CURRENT_SOURCE_DIR}/Source/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/Source/*.h")
|
||||
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/Source")
|
||||
|
||||
find_package(spdlog CONFIG REQUIRED)
|
||||
find_package(Vulkan REQUIRED)
|
||||
find_package(glm CONFIG REQUIRED)
|
||||
|
||||
add_executable (NitricEngine ${SourceFiles})
|
||||
|
||||
target_link_libraries(NitricEngine PRIVATE glm::glm)
|
||||
target_link_libraries(NitricEngine PRIVATE spdlog::spdlog)
|
||||
target_link_libraries(NitricEngine PRIVATE Vulkan::Vulkan)
|
||||
target_link_libraries(NitricEngine PRIVATE Nitric)
|
||||
|
||||
if (CMAKE_VERSION VERSION_GREATER 3.12)
|
||||
set_property(TARGET NitricEngine PROPERTY CXX_STANDARD 20)
|
||||
endif()
|
||||
|
||||
# TODO: Add tests and install targets if needed.
|
||||
18
NitricEngine/Source/NitricEngine.cpp
Normal file
18
NitricEngine/Source/NitricEngine.cpp
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#include <Core/Application.h>
|
||||
#include <Core/EntryPoint.h>
|
||||
|
||||
class NitricEngine : public Nitric::Application {
|
||||
public:
|
||||
NitricEngine(const Nitric::ApplicationSettings& settings) : Application(settings) {
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
Nitric::Application* Nitric::CreateApplication() {
|
||||
ApplicationSettings settings;
|
||||
settings.Width = 1280;
|
||||
settings.Height = 720;
|
||||
settings.Title = "Nitric Engine";
|
||||
|
||||
return new NitricEngine(settings);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user