Add RenderEngine and create Vulkan instance
This commit is contained in:
parent
474b096337
commit
ece828d045
@ -1,5 +1,5 @@
|
|||||||
# NF library CMakeLists.txt
|
# NF library CMakeLists.txt
|
||||||
add_library(NothinFancy STATIC "src/Engine.cpp" "src/include/nf.h" "src/pch.h" "src/util.h" "src/util/log.h" "src/util/log.cpp" "src/include/nf/config.h" "src/util/util.cpp" "src/util/file.h" "src/util/file.cpp" "src/client/Client.h" "src/client/Client.cpp" "src/client/Window.h" "src/client/Window.cpp")
|
add_library(NothinFancy STATIC "src/Engine.cpp" "src/include/nf.h" "src/pch.h" "src/util.h" "src/util/log.h" "src/util/log.cpp" "src/include/nf/config.h" "src/util/util.cpp" "src/util/file.h" "src/util/file.cpp" "src/client/Client.h" "src/client/Client.cpp" "src/client/Window.h" "src/client/Window.cpp" "src/client/render/RenderEngine.h" "src/client/render/RenderEngine.cpp")
|
||||||
|
|
||||||
# Use C++20
|
# Use C++20
|
||||||
set_property(TARGET NothinFancy PROPERTY CXX_STANDARD 20)
|
set_property(TARGET NothinFancy PROPERTY CXX_STANDARD 20)
|
||||||
@ -10,6 +10,10 @@ target_include_directories(NothinFancy PUBLIC "src" "src/include")
|
|||||||
# Use precompiled header
|
# Use precompiled header
|
||||||
target_precompile_headers(NothinFancy PUBLIC "src/pch.h")
|
target_precompile_headers(NothinFancy PUBLIC "src/pch.h")
|
||||||
|
|
||||||
|
# Link libraries
|
||||||
|
target_link_libraries(NothinFancy "$ENV{VULKAN_SDK}/Lib/vulkan-1.lib")
|
||||||
|
target_include_directories(NothinFancy PUBLIC "$ENV{VULKAN_SDK}/Include")
|
||||||
|
|
||||||
# Generate version.h
|
# Generate version.h
|
||||||
find_package(Git)
|
find_package(Git)
|
||||||
execute_process(COMMAND ${GIT_EXECUTABLE} describe OUTPUT_VARIABLE NFVERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
execute_process(COMMAND ${GIT_EXECUTABLE} describe OUTPUT_VARIABLE NFVERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
@ -7,6 +7,7 @@ namespace nf::cli {
|
|||||||
Client::Client(ClientConfig config)
|
Client::Client(ClientConfig config)
|
||||||
: m_config(config)
|
: m_config(config)
|
||||||
, m_window(m_config.appName, m_config.display)
|
, m_window(m_config.appName, m_config.display)
|
||||||
|
, m_renderEngine()
|
||||||
{
|
{
|
||||||
// Setup window and renderer
|
// Setup window and renderer
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "nf/config.h"
|
#include "nf/config.h"
|
||||||
#include "Window.h"
|
#include "Window.h"
|
||||||
|
#include "render/RenderEngine.h"
|
||||||
|
|
||||||
namespace nf::cli {
|
namespace nf::cli {
|
||||||
class Client {
|
class Client {
|
||||||
@ -13,5 +14,6 @@ namespace nf::cli {
|
|||||||
private:
|
private:
|
||||||
ClientConfig m_config;
|
ClientConfig m_config;
|
||||||
Window m_window;
|
Window m_window;
|
||||||
|
render::RenderEngine m_renderEngine;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -17,12 +17,7 @@ namespace nf::cli {
|
|||||||
// Disable automatic DPI upscaling
|
// Disable automatic DPI upscaling
|
||||||
SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
|
SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
|
||||||
|
|
||||||
// Register window class
|
registerWindowClass();
|
||||||
WNDCLASS wc = {};
|
|
||||||
wc.lpszClassName = m_wndClassName;
|
|
||||||
wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
|
|
||||||
wc.lpfnWndProc = wndProc;
|
|
||||||
RegisterClass(&wc);
|
|
||||||
|
|
||||||
m_handle = CreateWindow(m_wndClassName, windowTitle, NULL, 0, 0, 0, 0, nullptr, nullptr, nullptr, this);
|
m_handle = CreateWindow(m_wndClassName, windowTitle, NULL, 0, 0, 0, 0, nullptr, nullptr, nullptr, this);
|
||||||
setDisplay(config);
|
setDisplay(config);
|
||||||
@ -34,7 +29,7 @@ namespace nf::cli {
|
|||||||
bool wasShown = IsWindowVisible(m_handle);
|
bool wasShown = IsWindowVisible(m_handle);
|
||||||
show(false);
|
show(false);
|
||||||
|
|
||||||
// Temporary monitor choice
|
// TODO: Only use "active" monitor when starting windowed
|
||||||
POINT cursor = {};
|
POINT cursor = {};
|
||||||
GetCursorPos(&cursor);
|
GetCursorPos(&cursor);
|
||||||
MONITORINFO mi = {};
|
MONITORINFO mi = {};
|
||||||
@ -80,6 +75,14 @@ namespace nf::cli {
|
|||||||
ShowWindow(m_handle, show ? SW_SHOW : SW_HIDE);
|
ShowWindow(m_handle, show ? SW_SHOW : SW_HIDE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Window::registerWindowClass() {
|
||||||
|
WNDCLASS wc = {};
|
||||||
|
wc.lpszClassName = m_wndClassName;
|
||||||
|
wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
|
||||||
|
wc.lpfnWndProc = wndProc;
|
||||||
|
RegisterClass(&wc);
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT CALLBACK Window::wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
LRESULT CALLBACK Window::wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
||||||
static Window* wnd = nullptr;
|
static Window* wnd = nullptr;
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ namespace nf::cli {
|
|||||||
void runLoop();
|
void runLoop();
|
||||||
void show(bool show = true);
|
void show(bool show = true);
|
||||||
private:
|
private:
|
||||||
|
void registerWindowClass();
|
||||||
static LRESULT CALLBACK wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
static LRESULT CALLBACK wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
SIZE getWindowSize();
|
SIZE getWindowSize();
|
||||||
|
|
||||||
|
36
NothinFancy/src/client/render/RenderEngine.cpp
Normal file
36
NothinFancy/src/client/render/RenderEngine.cpp
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// RenderEngine class implementation
|
||||||
|
#include "pch.h"
|
||||||
|
|
||||||
|
#include "RenderEngine.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
namespace nf::cli::render {
|
||||||
|
RenderEngine::RenderEngine()
|
||||||
|
: m_instance()
|
||||||
|
{
|
||||||
|
NFLog("Initializing render engine");
|
||||||
|
createInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RenderEngine::createInstance() {
|
||||||
|
VkApplicationInfo appInfo = { VK_STRUCTURE_TYPE_APPLICATION_INFO };
|
||||||
|
appInfo.apiVersion = VK_API_VERSION_1_0;
|
||||||
|
|
||||||
|
VkInstanceCreateInfo instanceCI = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO };
|
||||||
|
instanceCI.pApplicationInfo = &appInfo;
|
||||||
|
#ifdef _DEBUG
|
||||||
|
const char* validationLayerName = "VK_LAYER_KHRONOS_validation";
|
||||||
|
instanceCI.ppEnabledLayerNames = &validationLayerName;
|
||||||
|
instanceCI.enabledLayerCount = 1;
|
||||||
|
#endif
|
||||||
|
std::vector<const char*> instanceExtNames = { VK_KHR_SURFACE_EXTENSION_NAME, VK_KHR_WIN32_SURFACE_EXTENSION_NAME };
|
||||||
|
instanceCI.ppEnabledExtensionNames = instanceExtNames.data();
|
||||||
|
instanceCI.enabledExtensionCount = instanceExtNames.size();
|
||||||
|
if (vkCreateInstance(&instanceCI, nullptr, &m_instance) != VK_SUCCESS)
|
||||||
|
NFError("Could not create Vulkan instance.");
|
||||||
|
}
|
||||||
|
|
||||||
|
RenderEngine::~RenderEngine() {
|
||||||
|
vkDestroyInstance(m_instance, nullptr);
|
||||||
|
}
|
||||||
|
}
|
15
NothinFancy/src/client/render/RenderEngine.h
Normal file
15
NothinFancy/src/client/render/RenderEngine.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// RenderEngine class header
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace nf::cli::render {
|
||||||
|
class RenderEngine {
|
||||||
|
public:
|
||||||
|
RenderEngine();
|
||||||
|
|
||||||
|
~RenderEngine();
|
||||||
|
private:
|
||||||
|
void createInstance();
|
||||||
|
|
||||||
|
VkInstance m_instance;
|
||||||
|
};
|
||||||
|
}
|
@ -37,3 +37,7 @@
|
|||||||
// Windows
|
// Windows
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
|
||||||
|
// Vulkan
|
||||||
|
#define VK_USE_PLATFORM_WIN32_KHR
|
||||||
|
#include <vulkan/vulkan.h>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user