From 762485f135f5a9b9ce9989dc10d226eb957ecf54 Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Sun, 29 Aug 2021 18:23:13 +0200
Subject: [PATCH] [#101] Simplified constructor for features collection

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 include/vkcv/Features.hpp                 | 5 +++++
 projects/first_mesh/src/main.cpp          | 5 +----
 projects/first_scene/src/main.cpp         | 5 +----
 projects/first_triangle/src/main.cpp      | 5 +----
 projects/particle_simulation/src/main.cpp | 5 +----
 src/vkcv/Features.cpp                     | 6 ++++++
 6 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/include/vkcv/Features.hpp b/include/vkcv/Features.hpp
index 3c56eb61..6ef3fa28 100644
--- a/include/vkcv/Features.hpp
+++ b/include/vkcv/Features.hpp
@@ -2,6 +2,7 @@
 
 #include <functional>
 #include <vector>
+#include <initializer_list>
 
 #include "FeatureManager.hpp"
 
@@ -15,8 +16,12 @@ namespace vkcv {
 		
 	public:
 		Features() = default;
+		
+		Features(const std::initializer_list<std::string>& list);
+		
 		Features(const Features& other) = default;
 		Features(Features&& other) = default;
+		
 		~Features() = default;
 		
 		Features& operator=(const Features& other) = default;
diff --git a/projects/first_mesh/src/main.cpp b/projects/first_mesh/src/main.cpp
index f784c130..8f0e2d1c 100644
--- a/projects/first_mesh/src/main.cpp
+++ b/projects/first_mesh/src/main.cpp
@@ -19,15 +19,12 @@ int main(int argc, const char** argv) {
 		true
 	);
 	
-	vkcv::Features features;
-	features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
-
 	vkcv::Core core = vkcv::Core::create(
 		window,
 		applicationName,
 		VK_MAKE_VERSION(0, 0, 1),
 		{ vk::QueueFlagBits::eGraphics ,vk::QueueFlagBits::eCompute , vk::QueueFlagBits::eTransfer },
-		features
+		{ VK_KHR_SWAPCHAIN_EXTENSION_NAME }
 	);
 
 	vkcv::asset::Scene mesh;
diff --git a/projects/first_scene/src/main.cpp b/projects/first_scene/src/main.cpp
index 6ac367e4..21f8deac 100644
--- a/projects/first_scene/src/main.cpp
+++ b/projects/first_scene/src/main.cpp
@@ -28,16 +28,13 @@ int main(int argc, const char** argv) {
 	cameraManager.getCamera(camIndex0).setNearFar(0.1f, 30.0f);
 	
 	cameraManager.getCamera(camIndex1).setNearFar(0.1f, 30.0f);
-
-	vkcv::Features features;
-	features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
 	
 	vkcv::Core core = vkcv::Core::create(
 		window,
 		applicationName,
 		VK_MAKE_VERSION(0, 0, 1),
 		{ vk::QueueFlagBits::eGraphics ,vk::QueueFlagBits::eCompute , vk::QueueFlagBits::eTransfer },
-		features
+		{ VK_KHR_SWAPCHAIN_EXTENSION_NAME }
 	);
 	
 	vkcv::scene::Scene scene = vkcv::scene::Scene::load(core, std::filesystem::path(
diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp
index de5d345f..78a7db62 100644
--- a/projects/first_triangle/src/main.cpp
+++ b/projects/first_triangle/src/main.cpp
@@ -17,15 +17,12 @@ int main(int argc, const char** argv) {
 		false
 	);
 	
-	vkcv::Features features;
-	features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
-
 	vkcv::Core core = vkcv::Core::create(
 		window,
 		applicationName,
 		VK_MAKE_VERSION(0, 0, 1),
 		{ vk::QueueFlagBits::eTransfer,vk::QueueFlagBits::eGraphics, vk::QueueFlagBits::eCompute },
-		features
+		{ VK_KHR_SWAPCHAIN_EXTENSION_NAME }
 	);
 
 	const auto& context = core.getContext();
diff --git a/projects/particle_simulation/src/main.cpp b/projects/particle_simulation/src/main.cpp
index 1aafa57f..4de016ae 100644
--- a/projects/particle_simulation/src/main.cpp
+++ b/projects/particle_simulation/src/main.cpp
@@ -23,16 +23,13 @@ int main(int argc, const char **argv) {
     );
 
     vkcv::camera::CameraManager cameraManager(window);
-
-	vkcv::Features features;
-	features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
 	
     vkcv::Core core = vkcv::Core::create(
             window,
             applicationName,
             VK_MAKE_VERSION(0, 0, 1),
             {vk::QueueFlagBits::eTransfer, vk::QueueFlagBits::eGraphics, vk::QueueFlagBits::eCompute},
-			features
+			{ VK_KHR_SWAPCHAIN_EXTENSION_NAME }
     );
 
     auto particleIndexBuffer = core.createBuffer<uint16_t>(vkcv::BufferType::INDEX, 3,
diff --git a/src/vkcv/Features.cpp b/src/vkcv/Features.cpp
index 636f3f41..60616685 100644
--- a/src/vkcv/Features.cpp
+++ b/src/vkcv/Features.cpp
@@ -3,6 +3,12 @@
 
 namespace vkcv {
 	
+	Features::Features(const std::initializer_list<std::string>& list) : m_features() {
+		for (const auto& extension : list) {
+			requireExtension(extension);
+		}
+	}
+	
 	void Features::requireExtension(const std::string& extension) {
 		m_features.emplace_back([extension](FeatureManager& featureManager) {
 			return featureManager.useExtension(extension, true);
-- 
GitLab