#pragma once #include "slang-gfx.h" #include "tools/platform/window.h" #include "source/core/slang-basic.h" struct WindowedAppBase { protected: static const int kSwapchainImageCount = 2; Slang::RefPtr gWindow; uint32_t windowWidth; uint32_t windowHeight; Slang::ComPtr gDevice; Slang::ComPtr gSwapchain; Slang::ComPtr gFramebufferLayout; Slang::List> gFramebuffers; Slang::List> gTransientHeaps; Slang::ComPtr gRenderPass; Slang::ComPtr gQueue; Slang::Result initializeBase(const char* titile, int width, int height); void createSwapchainFramebuffers(); void mainLoop(); virtual void windowSizeChanged(); protected: virtual void renderFrame(int framebufferIndex) = 0; public: platform::Window* getWindow() { return gWindow.Ptr(); } virtual void finalize() { gQueue->wait(); } }; template int innerMain() { TApp app; if (SLANG_FAILED(app.initialize())) { return -1; } platform::Application::run(app.getWindow()); app.finalize(); return 0; }