# Render features

A @'Stride.Rendering.RenderFeature' is responsible for drawing a given type of @'Stride.Rendering.RenderObject'.

## Render phases

Render features have several phases.

### Collect

The **collect** phase determines what needs to be processed and rendered. It's usually driven by the [graphics compositor](../graphics-compositor/index.md).

The collect phase:

* creates render views, and updating them with the most recent data such as view and projection matrices
* creates and setting up render stages
* performes visibility culling and sorting

### Extract

The **extract** phase copies data from game states of previously collected objects to short-lived render-specific structures. It's usually driven by the @'Stride.Rendering.RenderSystem' and @'Stride.Rendering.RenderFeature's.

This should be as fast as possible and avoid heavy computations since game update and scripts are blocked. Heavy computations should be deferred to [Prepare](#prepare).

> [!Note]
> Currently, Stride doesn't parallelize game updates and scripts, so they won't be resumed until the **prepare** and **draw** phases are finished.

Example tasks:

* copying object matrices
* copying material parameters

### Prepare

The **prepare** phase prepares GPU resources and performs heavy computations. This is usually driven by the @'Stride.Rendering.RenderSystem' and @'Stride.Rendering.RenderFeature's.

Example tasks:

* computing lighting data and structures
* filling constant buffers and resource tables

### Draw

The **draw** phase fills the GPU command list.

Example tasks:

* setting up render textures
* drawing combinations of render stage with render view.

### Example

A typical example of views and stages created during **collect** phase, used during the **draw** phase:

![media/render-features-draw-example.png](media/render-features-draw-example.png)

### Pipeline processors

**Pipeline processors** are classes called when creating the [pipeline state](../low-level-api/pipeline-state.md). This lets you do things such as enable alpha blending or wireframe rendering in a specific render stage.

Stride includes several predefined pipeline processors. You can also create your own.

## See also

* [Rendering pipeline](index.md)
* [Render stages](render-stages.md)
* [Effects and shaders](../effects-and-shaders/index.md)
* [Graphics compositor](../graphics-compositor/index.md)