# Juliet\include\Graphics\RenderPass

## Source Files
- Header: `Juliet\include\Graphics\RenderPass.h`

## AI Description
The `RenderPass` class in the Juliet graphics library is designed to encapsulate the functionality required for rendering a single pass of a scene. It manages the setup and execution of the render pipeline, including color targets, depth stencil targets, blend states, and other necessary parameters.

### Main Purpose

The primary purpose of the `RenderPass` class is to provide a structured way to define and execute rendering operations in a graphics application. This allows for better organization and management of rendering logic, making it easier to maintain and extend the graphics system.

### Design

#### Color Targets

- **TargetTexture**: A pointer to the texture where the rendered output will be stored.
- **MipLevel**: The mip level at which the target texture should be accessed.
- **CycleTexture**: A boolean flag indicating whether the texture should be cycled if already bound (and load operation != LOAD).
- **ResolveTexture**: A pointer to a texture used for resolving MipMaps into non-mip-map textures. Discard MipMap content if not specified.
- **ResolveMipLevel**: The mip level at which the resolve texture should be accessed.
- **ResolveLayerIndex**: The layer index within the resolve texture (if applicable).
- **CycleResolveTexture**: A boolean flag indicating whether the resolve texture should be cycled if already bound.
- **ClearColor**: The color to clear the target texture with before rendering.
- **LoadOperation**: Specifies how the texture should be loaded from memory (e.g., LOAD, CLEAR, IGNORE).
- **StoreOperation**: Specifies how the result of the render pass should be stored into memory (e.g., STORE, IGNORE, RESOLVE, RESOLVE_AND_STORE).

#### Depth Stencil Targets

- **TargetTexture**: A pointer to the texture where the depth and stencil information will be stored.
- **MipLevel**: The mip level at which the target texture should be accessed.
- **LayerIndex**: The layer index within the target texture (if applicable).
- **ClearDepth**: The depth value to clear the target texture with before rendering.
- **ClearStencil**: The stencil value to clear the target texture with before rendering.
- **LoadOperation**: Specifies how the texture should be loaded from memory (e.g., LOAD, CLEAR, IGNORE).
- **StoreOperation**: Specifies how the result of the render pass should be stored into memory (e.g., STORE, IGNORE, RESOLVE, RESOLVE_AND_STORE).

#### Blend States

- **SourceColorBlendFactor**: The blend factor for the source RGB value.
- **DestinationColorBlendFactor**: The blend factor for the destination RGB value.
- **ColorBlendOperation**: The blend operation for the RGB components.
- **SourceAlphaBlendFactor**: The blend factor for the source alpha.
- **DestinationAlphaBlendFactor**: The blend factor for the destination alpha.
- **AlphaBlendOperation**: The blend operation for the alpha component.
- **ColorWriteMask**: A bitmask specifying which of the RGBA

## Symbols

### Namespace `Juliet`

#### Classes, Structs & Unions
- `struct ColorTargetInfo`
- `union ColorTargetInfo::anonymous`
- `struct DepthStencilTargetInfo`
- `struct ColorTargetBlendState`
- `struct ColorTargetDescription`

#### Enums
- `enum struct`
- `enum struct`
- `enum class BlendFactor`
- `enum class BlendOperation`
- `enum class ColorComponentFlags`

