From e90c043c6b66a2c69eec4ecb0e78251a58a44a2f Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Sun, 10 Jan 2021 23:39:13 +0100 Subject: [PATCH] Update shader loading --- openVulkanoCpp/Base/Utils.cpp | 14 ++++++++++++++ openVulkanoCpp/Base/Utils.hpp | 3 +++ openVulkanoCpp/Vulkan/Device.cpp | 13 ++++--------- openVulkanoCpp/Vulkan/Device.hpp | 2 +- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/openVulkanoCpp/Base/Utils.cpp b/openVulkanoCpp/Base/Utils.cpp index 75b1d0d..ea68460 100644 --- a/openVulkanoCpp/Base/Utils.cpp +++ b/openVulkanoCpp/Base/Utils.cpp @@ -10,6 +10,8 @@ #include #else #include +#include + #endif namespace openVulkanoCpp @@ -24,4 +26,16 @@ namespace openVulkanoCpp pthread_setname_np(pthread_self(), name.c_str()); #endif } + + Array Utils::ReadFile(const std::string& filePath) + { + std::ifstream file(filePath, std::ios::ate | std::ios::binary); + if (!file.is_open()) throw std::runtime_error("Failed to open file '" + filePath + "'!"); + const size_t fileSize = static_cast(file.tellg()); + Array data(fileSize); + file.seekg(0); + file.read(data.Data(), fileSize); + file.close(); + return data; + } } \ No newline at end of file diff --git a/openVulkanoCpp/Base/Utils.hpp b/openVulkanoCpp/Base/Utils.hpp index d578343..191eff4 100644 --- a/openVulkanoCpp/Base/Utils.hpp +++ b/openVulkanoCpp/Base/Utils.hpp @@ -10,6 +10,7 @@ #include #include #include +#include "Data/Containers/Array.hpp" namespace openVulkanoCpp { @@ -124,5 +125,7 @@ namespace openVulkanoCpp { return str.size() >= suffix.size() && 0 == str.compare(str.size()-suffix.size(), suffix.size(), suffix); } + + static Array ReadFile(const std::string& filePath); }; } diff --git a/openVulkanoCpp/Vulkan/Device.cpp b/openVulkanoCpp/Vulkan/Device.cpp index 424778c..37edd79 100644 --- a/openVulkanoCpp/Vulkan/Device.cpp +++ b/openVulkanoCpp/Vulkan/Device.cpp @@ -5,6 +5,7 @@ */ #include "Device.hpp" +#include "Base/Utils.hpp" namespace openVulkanoCpp::Vulkan { @@ -85,16 +86,10 @@ namespace openVulkanoCpp::Vulkan device.freeCommandBuffers(graphicsCommandPool, commandBuffer); } - vk::ShaderModule Device::CreateShaderModule(const std::string& filename) + vk::ShaderModule Device::CreateShaderModule(const std::string& filename) const { - std::ifstream file(filename, std::ios::ate | std::ios::binary); - if (!file.is_open()) throw std::runtime_error("Failed to open shader file!"); - const size_t fileSize = static_cast(file.tellg()); - std::vector buffer(fileSize); - file.seekg(0); - file.read(buffer.data(), fileSize); - file.close(); - vk::ShaderModuleCreateInfo smci = { {}, buffer.size(), reinterpret_cast(buffer.data()) }; + Array buffer = Utils::ReadFile(filename); + vk::ShaderModuleCreateInfo smci = { {}, buffer.Size(), reinterpret_cast(buffer.Data()) }; return CreateShaderModule(smci); } diff --git a/openVulkanoCpp/Vulkan/Device.hpp b/openVulkanoCpp/Vulkan/Device.hpp index e12f62b..9159a14 100644 --- a/openVulkanoCpp/Vulkan/Device.hpp +++ b/openVulkanoCpp/Vulkan/Device.hpp @@ -75,7 +75,7 @@ namespace openVulkanoCpp void ExecuteNow(const std::function& function) const; - vk::ShaderModule CreateShaderModule(const std::string& filename); + vk::ShaderModule CreateShaderModule(const std::string& filename) const; vk::ShaderModule CreateShaderModule(vk::ShaderModuleCreateInfo& createInfo) const;