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
|