diff --git a/CopiumEngine/CopiumEngine.vcxproj b/CopiumEngine/CopiumEngine.vcxproj
index 9ff3538..fa4aaab 100644
--- a/CopiumEngine/CopiumEngine.vcxproj
+++ b/CopiumEngine/CopiumEngine.vcxproj
@@ -127,7 +127,7 @@
Console
true
- $(SolutionDir)libs\$(Platform)\$(Configuration)\;C:/VulkanSDK/1.3.236.0/Lib;%(AdditionalLibraryDirectories)
+ $(SolutionDir)libs\$(Platform)\$(Configuration)\;$(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories)
vulkan-1.lib;glfw3.lib;shaderc_combinedd.lib;msdfgen-core.lib;msdfgen-ext.lib;msdf-atlas-gen.lib;freetype.lib;%(AdditionalDependencies)
@@ -156,7 +156,7 @@
true
true
true
- $(SolutionDir)libs\$(Platform)\$(Configuration)\;C:/VulkanSDK/1.3.236.0/Lib;%(AdditionalLibraryDirectories)
+ $(SolutionDir)libs\$(Platform)\$(Configuration)\;$(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories)
vulkan-1.lib;glfw3.lib;shaderc_combined.lib;msdfgen-core.lib;msdfgen-ext.lib;msdf-atlas-gen.lib;freetype.lib;%(AdditionalDependencies)
diff --git a/CopiumEngine/CopiumEngine.vcxproj.user b/CopiumEngine/CopiumEngine.vcxproj.user
index 21b8a9b..abb4d01 100644
--- a/CopiumEngine/CopiumEngine.vcxproj.user
+++ b/CopiumEngine/CopiumEngine.vcxproj.user
@@ -4,11 +4,11 @@
true
- VK_LAYER_PATH=C:\VulkanSDK\1.3.236.0\Bin
+ VK_LAYER_PATH=$(VULKAN_SDK)\Bin
WindowsLocalDebugger
- VK_LAYER_PATH=C:\VulkanSDK\1.3.236.0\Bin
+ VK_LAYER_PATH=$(VULKAN_SDK)\Bin
WindowsLocalDebugger
\ No newline at end of file
diff --git a/CopiumEngine/src/copium/core/Device.cpp b/CopiumEngine/src/copium/core/Device.cpp
index 3616cbf..9caf411 100644
--- a/CopiumEngine/src/copium/core/Device.cpp
+++ b/CopiumEngine/src/copium/core/Device.cpp
@@ -63,25 +63,26 @@ namespace Copium
std::vector devices(deviceCount);
vkEnumeratePhysicalDevices(Vulkan::GetInstance(), &deviceCount, devices.data());
+
+ std::vector> devicePriorities;
+ devicePriorities.reserve(deviceCount);
CP_INFO("Available devices:");
for (auto&& device : devices)
{
VkPhysicalDeviceProperties deviceProperties;
vkGetPhysicalDeviceProperties(device, &deviceProperties);
CP_INFO_CONT("\t%s", deviceProperties.deviceName);
+ devicePriorities.emplace_back(device, GetPhysicalDevicePriority(device));
}
- for (auto&& device : devices)
- {
- if (IsPhysicalDeviceSuitable(device))
- {
- VkPhysicalDeviceProperties deviceProperties;
- vkGetPhysicalDeviceProperties(device, &deviceProperties);
- physicalDevice = device;
- CP_INFO("Selecting device: %s", deviceProperties.deviceName);
- break;
- }
- }
- CP_ASSERT(physicalDevice != VK_NULL_HANDLE, "Failed to find suitable GPU");
+
+ std::sort(devicePriorities.begin(), devicePriorities.end(), [](const std::pair& lhs, const std::pair& rhs) { return lhs.second > rhs.second; });
+ auto&& it = devicePriorities.begin();
+ CP_ASSERT(it->second != 0, "Failed to find suitable GPU");
+
+ VkPhysicalDeviceProperties deviceProperties;
+ vkGetPhysicalDeviceProperties(it->first, &deviceProperties);
+ physicalDevice = it->first;
+ CP_INFO("Selecting device: %s", deviceProperties.deviceName);
}
void Device::InitializeLogicalDevice()
@@ -130,30 +131,33 @@ namespace Copium
CP_VK_ASSERT(vkCreateCommandPool(device, &createInfo, nullptr, &commandPool), "Failed to initialize command pool");
}
- bool Device::IsPhysicalDeviceSuitable(VkPhysicalDevice device)
+ uint32_t Device::GetPhysicalDevicePriority(VkPhysicalDevice device)
{
+ uint32_t priority = 0;
VkPhysicalDeviceProperties deviceProperties;
vkGetPhysicalDeviceProperties(device, &deviceProperties);
- if (deviceProperties.deviceType != VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
- return false;
+ if (deviceProperties.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
+ priority = 100;
+ else
+ priority = 50;
VkPhysicalDeviceFeatures deviceFeatures;
vkGetPhysicalDeviceFeatures(device, &deviceFeatures);
if (!deviceFeatures.fillModeNonSolid || !deviceFeatures.samplerAnisotropy)
- return false;
+ return 0;
QueueFamiliesQuery query{Vulkan::GetWindow().GetSurface(), device};
if (!query.AllRequiredFamiliesSupported())
- return false;
+ return 0;
if (!CheckDeviceExtensionSupport(device))
- return false;
+ return 0;
SwapChainSupportDetails details{Vulkan::GetWindow().GetSurface(), device};
if (!details.Valid())
- return false;
+ return 0;
- return true;
+ return priority;
}
bool Device::CheckDeviceExtensionSupport(VkPhysicalDevice device)
diff --git a/CopiumEngine/src/copium/core/Device.h b/CopiumEngine/src/copium/core/Device.h
index 24b6687..9d5696a 100644
--- a/CopiumEngine/src/copium/core/Device.h
+++ b/CopiumEngine/src/copium/core/Device.h
@@ -38,7 +38,7 @@ namespace Copium
void SelectPhysicalDevice();
void InitializeLogicalDevice();
void InitializeCommandPool();
- bool IsPhysicalDeviceSuitable(VkPhysicalDevice device);
+ uint32_t GetPhysicalDevicePriority(VkPhysicalDevice device);
bool CheckDeviceExtensionSupport(VkPhysicalDevice device);
std::vector GetRequiredDeviceExtensions();
};
diff --git a/CopiumEngine/src/copium/core/Vulkan.cpp b/CopiumEngine/src/copium/core/Vulkan.cpp
index 2a266fb..bf08857 100644
--- a/CopiumEngine/src/copium/core/Vulkan.cpp
+++ b/CopiumEngine/src/copium/core/Vulkan.cpp
@@ -17,7 +17,7 @@ namespace Copium
void Vulkan::Initialize()
{
instance = std::make_unique("Copium Engine");
- window = std::make_unique("Copium Engine", 1920, 1080, WindowMode::Windowed);
+ window = std::make_unique("Copium Engine", 1440, 810, WindowMode::Windowed);
device = std::make_unique();
swapChain = std::make_unique();
diff --git a/CopiumEngine/src/copium/core/Window.cpp b/CopiumEngine/src/copium/core/Window.cpp
index 792dd27..bc146bd 100644
--- a/CopiumEngine/src/copium/core/Window.cpp
+++ b/CopiumEngine/src/copium/core/Window.cpp
@@ -45,15 +45,15 @@ namespace Copium
{
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
- window = glfwCreateWindow(mode->width, mode->height, windowName.c_str(), glfwGetPrimaryMonitor(), nullptr);
+ window = glfwCreateWindow(mode->width, mode->height, windowName.c_str(), monitor, nullptr);
break;
}
case WindowMode::BorderlessWindowed:
{
- GLFWmonitor* monitor = glfwGetPrimaryMonitor();
- const GLFWvidmode* mode = glfwGetVideoMode(monitor);
+ const GLFWvidmode* mode = glfwGetVideoMode(glfwGetPrimaryMonitor());
+
+ glfwWindowHint(GLFW_DECORATED, false);
window = glfwCreateWindow(mode->width, mode->height, windowName.c_str(), nullptr, nullptr);
- glfwSetWindowMonitor(window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate);
break;
}
case WindowMode::Windowed:
@@ -83,6 +83,8 @@ namespace Copium
void Window::FramebufferResizeCallback(GLFWwindow* glfwWindow, int width, int height)
{
+ if (width == 0 || height == 0)
+ return;
Vulkan::GetSwapChain().ResizeFramebuffer();
EventDispatcher::QueueEvent(WindowResizeEvent{width, height});
}
diff --git a/ext/projects/glfw3/glfw3.vcxproj b/ext/projects/glfw3/glfw3.vcxproj
index 64131ff..364b37c 100644
--- a/ext/projects/glfw3/glfw3.vcxproj
+++ b/ext/projects/glfw3/glfw3.vcxproj
@@ -161,6 +161,8 @@
+
+
diff --git a/ext/projects/glfw3/glfw3.vcxproj.filters b/ext/projects/glfw3/glfw3.vcxproj.filters
index f398133..cba7e72 100644
--- a/ext/projects/glfw3/glfw3.vcxproj.filters
+++ b/ext/projects/glfw3/glfw3.vcxproj.filters
@@ -116,5 +116,11 @@
Header Files
+
+ Header Files
+
+
+ Header Files
+
\ No newline at end of file