iwa/source/app/vulkan_application.cpp
2024-04-06 14:11:26 +02:00

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