38 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
 | |
| #include "iwa/app/vulkan_application.hpp"
 | |
| 
 | |
| #include <mijin/virtual_filesystem/filesystem.hpp>
 | |
| #include <mijin/virtual_filesystem/relative.hpp>
 | |
| 
 | |
| namespace iwa
 | |
| {
 | |
| VulkanApplication::VulkanApplication(const ApplicationCreationArgs& args, ObjectPtr<> owner) : super_t(std::move(owner))
 | |
| {
 | |
|     mInstance = Instance::create(args.instanceArgs);
 | |
|     mDevice = mInstance->createDevice(args.deviceArgs);
 | |
|     mMainWindow = mInstance->createWindow(args.mainWindowArgs);
 | |
| 
 | |
|     SwapchainCreationArgs swapchainCreationArgs = args.mainWindowSwapchainArgs;
 | |
|     MIJIN_ASSERT(swapchainCreationArgs.window == nullptr, "Main window swapchain args shouldn't contain a window.");
 | |
|     swapchainCreationArgs.window = mMainWindow;
 | |
|     mMainWindowSwapchain = mDevice->createChild<Swapchain>(swapchainCreationArgs);
 | |
| 
 | |
|     if (!args.assetPath.empty())
 | |
|     {
 | |
|         mInstance->getPrimaryFSAdapter().emplaceAdapter<mijin::RelativeFileSystemAdapter<mijin::OSFileSystemAdapter>>(
 | |
|             /* root = */ fs::current_path() / "assets"
 | |
|         );
 | |
|     }
 | |
| }
 | |
| 
 | |
| int VulkanApplication::execute(int argc, char** argv) // NOLINT
 | |
| {
 | |
|     (void) argc;
 | |
|     (void) argv;
 | |
|     mInstance->getMainTaskLoop().addTask(c_init());
 | |
|     mInstance->getMainTaskLoop().runUntilDone();
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| } // namespace iwa
 |