A framebuffer is a collection of render targets. When we want to draw things, we "bind" the framebuffer so that it can be drawn to. You can create a framebuffer for a single render target, but you can also create a framebuffer consisting of up to 4 color targets and a depth/stencil target. This is useful for techniques such as [deferred rendering](https://learnopengl.com/Advanced-Lighting/Deferred-Shading), because it is much cheaper to render to a bunch of render targets all at once instead of switching them out.
To create a framebuffer, we must provide dimensions, a Render Pass, and some render targets.
```cs
var myFramebuffer = new Framebuffer(
GraphicsDevice,
1280,
720,
myRenderPass,
myColorTarget
);
```
This will create a framebuffer of size 1280x720 that uses `myColorTarget` as its color target and is based on `myRenderPass`. There is a concept of "render pass compatibility" that will let you use a framebuffer with multiple different render passes, but it's usually easier to just make framebuffers you need per render pass that you will be using.
```cs
var myMultiTargetFrameBuffer = new Framebuffer(
GraphicsDevice,
1280,
720,
myGBufferRenderPass,
myPositionTarget,
myNormalTarget,
myAlbedoTarget,
myMetallicRoughnessTarget,
myDepthTarget
);
```
This will create a multiple render target framebuffer. That's pretty much all there is to say about framebuffers for now.