I’m building a video game engine using C++ as the coding language and Vulkan for graphics. I am trying to set up a generic renderer using Vulkan that is flexible and will render objects based on a vector that is supplied to it. The renderer will also handle the creation of the window using GLFW and use GLM for all relevant math calls. The code has the following classes:

1. Window:
- A class to initialize and manage the GLFW window.
- Responsible for creating and configuring the window, handling user events (e.g., keyboard, mouse), and cleaning up resources when the window is closed.

2. Pipeline:
- A class to set up and manage the Vulkan pipeline, which contains shaders, pipeline layout, and related configuration.
- Handles creation and destruction of pipeline objects and setting pipeline configurations (e.g., shader stages, vertex input state, rasterization state, etc.).

3. Renderer:
- A class to manage the rendering process, including handling drawing commands and submitting completed frames to the swapchain.
- Takes input data (object vector), sets up command buffers, and interacts with Vulkan’s command queues.

4. Swapchain:
- A class to manage the Vulkan Swapchain, which handles presenting rendered images to the window.
- Provides functionality for creating and destroying swapchains, acquiring images, and presenting images to the display surface.

5. ResourceLoader:
- A class to handle loading of assets, such as textures, meshes, and shaders.
- Provides functionality for reading files from the file system, parsing file formats, and setting up appropriate Vulkan resources.

6. Camera:
- A class to represent the camera in the 3D world and generate view and projection matrices.
- Using GLM to perform the calculations, this class handles camera movement, rotations, and updates.

7. Transform:
- A class or struct to represent the position, rotation, and scale of objects in the 3D world, with transformation matrix calculations using GLM.

8. Mesh:
- A class to represent a 3D model or mesh, including vertex and index data.
- Manages the creation and destruction of Vulkan buffers for its data.

9. Texture and/or Material:
- Classes to manage textures and materials used by objects.
- Includes functionality for creating and destroying Vulkan resources (e.g., image, image view, sampler) associated with texture data.

10. GameObject:
- A class to represent a single object in the game world.
- Contains a reference to a mesh, a material, and a transform, as well as any additional object-specific logic.

11. Scene:
- A class that contains all game objects in a specific scene, as well as functionality for updating and rendering objects.
- Keeps track of objects in the form of a vector or another suitable data structure.

What would the code for the header file and cpp file look like for the Window class?