# Juliet\include\Core\Application\IApplication

## Source Files
- Header: `Juliet\include\Core\Application\IApplication.h`

## AI Description
The `IApplication` class in the provided C++ component serves as a central interface for managing the lifecycle of an application. It encapsulates the core functionalities required to initialize, shutdown, and update the application state. The class provides methods for accessing engine systems such as the platform window and graphics device.

Key features include:
- Initialization and shutdown methods (`Init` and `Shutdown`) that manage resources and clean up.
- Update method (`Update`) where game logic is executed.
- Accessors for engine systems like the platform window and graphics device.
- Render lifecycle methods (`OnPreRender`, `OnRender`, `GetColorTargetInfo`, `GetDepthTargetInfo`, and `GetDebugCamera`) that handle rendering tasks.

This design ensures that all application components are managed efficiently, facilitating a smooth and organized development process.

## Symbols

### Namespace `Juliet`

#### Classes, Structs & Unions
- `class IApplication`

#### Functions & Methods
- `public:
        virtual IApplication::~IApplication()`
- `virtual void IApplication::Init(NonNullPtr<Arena> arena)`
- `virtual void IApplication::Shutdown()`
- `virtual void IApplication::Update()`
- `virtual bool IApplication::IsRunning()`
- `// Accessors for Engine Systems
        virtual struct Window* IApplication::GetPlatformWindow()`
- `virtual struct GraphicsDevice* IApplication::GetGraphicsDevice()`
- `// Render Lifecycle (Engine-Managed Render Loop)
        virtual void IApplication::OnPreRender(CommandList* cmd)`
- `virtual void IApplication::OnRender(RenderPass* pass, CommandList* cmd)`
- `virtual ColorTargetInfo IApplication::GetColorTargetInfo(Texture* swapchainTexture)`
- `virtual DepthStencilTargetInfo* IApplication::GetDepthTargetInfo()`
- `virtual struct Camera IApplication::GetDebugCamera()`

