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