#pragma once #include #include #include #include #include struct Mesh; struct GraphicsTransferBuffer; struct GraphicsBuffer; struct GraphicsDevice; struct Window; class JulietApplication : public IApplication { protected: void Init(NonNullPtr arena) override; void Shutdown() override; void Update(float deltaTime) override; bool IsRunning() override; Window* GetPlatformWindow() override { return MainWindow; } GraphicsDevice* GetGraphicsDevice() override { return GraphicsDevice; } // Render Lifecycle ColorTargetInfo GetColorTargetInfo(Texture* swapchainTexture) override; DepthStencilTargetInfo* GetDepthTargetInfo() override; #if 0 Camera GetDebugCamera() override; #endif public: void SetAutoCloseFrameCount(int count) { AutoCloseFrameCount = count; } int GetAutoCloseFrameCount() const { return AutoCloseFrameCount; } private: Window* MainWindow = {}; GraphicsDevice* GraphicsDevice = {}; HotReloadCode GameCode = {}; GraphicsPipeline* GraphicsPipeline = {}; Texture* DepthBuffer = {}; int AutoCloseFrameCount = -1; bool Running = false; float CameraTime = 0.0f; }; JulietApplication& GetApplication();