Index: game-gui-glfw.cpp
===================================================================
--- game-gui-glfw.cpp	(revision 0e6ecf3a10430e2bf6c5aacbc94e7b071595df55)
+++ game-gui-glfw.cpp	(revision 8667f76b356145b63b25cb3260e2dcfd293b8c19)
@@ -26,2 +26,17 @@
       RTWO_SUCCESS : RTWO_ERROR;
 }
+
+vector<const char*> GameGui_GLFW::GetRequiredExtensions() {
+   uint32_t glfwExtensionCount = 0;
+   const char** glfwExtensions;
+
+   glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);
+
+   vector<const char*> extensions(glfwExtensions, glfwExtensions + glfwExtensionCount);
+
+   return extensions;
+}
+
+void GameGui_GLFW::GetWindowSize(int* width, int* height) {
+   glfwGetFramebufferSize(window, width, height);
+}
Index: game-gui-glfw.hpp
===================================================================
--- game-gui-glfw.hpp	(revision 0e6ecf3a10430e2bf6c5aacbc94e7b071595df55)
+++ game-gui-glfw.hpp	(revision 8667f76b356145b63b25cb3260e2dcfd293b8c19)
@@ -16,4 +16,6 @@
 
       bool CreateVulkanSurface(VkInstance instance, VkSurfaceKHR* surface);
+      vector<const char*> GetRequiredExtensions();
+      void GetWindowSize(int* width, int* height);
 
    private:
Index: game-gui-sdl.cpp
===================================================================
--- game-gui-sdl.cpp	(revision 0e6ecf3a10430e2bf6c5aacbc94e7b071595df55)
+++ game-gui-sdl.cpp	(revision 8667f76b356145b63b25cb3260e2dcfd293b8c19)
@@ -37,2 +37,16 @@
       RTWO_SUCCESS : RTWO_ERROR;
 }
+
+vector<const char*> GameGui_SDL::GetRequiredExtensions() {
+   uint32_t extensionCount = 0;
+   SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, nullptr);
+
+   vector<const char*> extensions(extensionCount);
+   SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, extensions.data());
+
+   return extensions;
+}
+
+void GameGui_SDL::GetWindowSize(int* width, int* height) {
+   SDL_GetWindowSize(window, width, height);
+}
Index: game-gui-sdl.hpp
===================================================================
--- game-gui-sdl.hpp	(revision 0e6ecf3a10430e2bf6c5aacbc94e7b071595df55)
+++ game-gui-sdl.hpp	(revision 8667f76b356145b63b25cb3260e2dcfd293b8c19)
@@ -16,4 +16,6 @@
 
       bool CreateVulkanSurface(VkInstance instance, VkSurfaceKHR* surface);
+      vector<const char*> GetRequiredExtensions();
+      void GetWindowSize(int* width, int* height);
 
    private:
Index: game-gui.hpp
===================================================================
--- game-gui.hpp	(revision 0e6ecf3a10430e2bf6c5aacbc94e7b071595df55)
+++ game-gui.hpp	(revision 8667f76b356145b63b25cb3260e2dcfd293b8c19)
@@ -5,4 +5,5 @@
 
 #include <string>
+#include <vector>
 
 using namespace std;
@@ -21,5 +22,7 @@
       virtual void DestroyWindow() = 0;
 
-      virtual bool CreateVulkanSurface(VkInstance instance, VkSurfaceKHR* surface) = 0; 
+      virtual bool CreateVulkanSurface(VkInstance instance, VkSurfaceKHR* surface) = 0;
+      virtual vector<const char*> GetRequiredExtensions() = 0;
+      virtual void GetWindowSize(int* width, int* height) = 0;
 };
 
Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision 0e6ecf3a10430e2bf6c5aacbc94e7b071595df55)
+++ vulkan-game.cpp	(revision 8667f76b356145b63b25cb3260e2dcfd293b8c19)
@@ -14,5 +14,4 @@
 #include <optional>
 #include <set>
-#include <vector>
 
 using namespace std;
@@ -125,5 +124,4 @@
       bool framebufferResized = false;
 
-      // both SDL and GLFW create window functions return NULL on failure
       bool initWindow() {
          if (gui->Init() == RTWO_ERROR) {
@@ -160,10 +158,10 @@
       void recreateSwapChain() {
          int width = 0, height = 0;
-         SDL_GetWindowSize(window, &width, &height);
+         gui->GetWindowSize(&width, &height);
 
          while (width == 0 || height == 0 ||
             (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED) != 0) {
             SDL_WaitEvent(nullptr);
-            SDL_GetWindowSize(window, &width, &height);
+            gui->GetWindowSize(&width, &height);
          }
 
@@ -219,5 +217,5 @@
          createInfo.ppEnabledExtensionNames = extensions.data();
 
-         cout << endl << "SDL extensions:" << endl;
+         cout << endl << "Extensions:" << endl;
          for (const char* extensionName : extensions) {
             cout << extensionName << endl;
@@ -488,5 +486,5 @@
          } else {
             int width, height;
-            SDL_GetWindowSize(window, &width, &height);
+            gui->GetWindowSize(&width, &height);
 
             VkExtent2D actualExtent = {
@@ -511,9 +509,5 @@
 
       vector<const char*> getRequiredExtensions() {
-         uint32_t extensionCount = 0;
-         SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, nullptr);
-
-         vector<const char*> extensions(extensionCount);
-         SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, extensions.data());
+         vector<const char*> extensions = gui->GetRequiredExtensions();
 
          if (enableValidationLayers) {
