lovr.graphics.getPass
EditCreates and returns a temporary Pass object.
Create a compute or transfer pass.
Arguments
Name | Type | Description |
type | PassType | The type of pass to create. |
Returns
Name | Type | Description |
pass | Pass | The new Pass. |
Create a render pass.
Arguments
Name | Type | Description |
type | PassType | The type of pass to create. |
texture | Texture | The texture the render pass will render to. Ignored for non-render passes. |
Returns
Name | Type | Description |
pass | Pass | The new Pass. |
Create a render pass, with options.
Arguments
Name | Type | Default | Description |
type | PassType | The type of pass to create. | |
canvas | table | Render pass configuration. Up to 4 textures can be provided in table keys 1 through 4. Ignored for non-render passes. | |
.depth | table |
Depth/stencil buffer configuration. In addition to a table, it can be a Texture , a TextureFormat , or false to disable the depth buffer.
| |
.format | TextureFormat | 'd32f' |
The format of the depth buffer texture, which must be a depth format (the ones that start with d ). LÖVR will create or reuse an internal depth buffer with this format.
|
.texture | Texture |
A Texture to use as the depth buffer. Takes precedence over format .
| |
.clear | number | 0 |
How to clear the depth buffer at the beginning of the pass. Can be a floating point number to clear each pixel to, true to do a "fast clear" that clears to random data, or false to not clear at all and instead load the depth texture's pixels.
|
.clear | * |
How to clear the color textures at the beginning of the pass. If this is a boolean or a color, that value will be used for all color textures. It can also be a table of colors or booleans, one for each color texture. Colors may be provided as Vec3 , Vec4 , hexcodes, or tables of numbers. Note that tables of hexcode colors are ambiguous and therefore unsupported. When using a boolean, true means to do a "fast clear" that clears the texture to random data, and false means to not clear at all and instead load the texture's existing pixels.
| |
.samples | number | 4 | The number of multisamples to use. Can be 4 for antialiasing, or 1 to disable antialiasing. |
.mipmap | boolean | false | Whether mipmaps for the color and depth textures should be regenerated after the pass is finished. |
Returns
Name | Type | Description |
pass | Pass | The new Pass. |
Notes
Fun facts about render passes:
- Textures must have been created with the
render
TextureUsage
. - Textures must have the same dimensions, layer counts, and sample counts.
- When rendering to textures with multiple layers, each draw will be broadcast to all layers.
Render passes have multiple "views" (cameras), and each layer uses a corresponding view,
allowing each layer to be rendered from a different viewpoint. This enables fast stereo
rendering, but can also be used to efficiently render to cubemaps. The
ViewIndex
variable can also be used in shaders to set up any desired per-view behavior. - If
mipmap
is true, then any textures with mipmaps must have thetransfer
TextureUsage
. - It's okay to have zero color textures, but in this case there must be a depth texture.
- Setting
clear
tofalse
for textures is usually very slow on mobile GPUs. - It's possible to render to a specific mipmap level of a Texture, or a subset of its layers, by
rendering to texture views, see
Texture:newView
.
For compute
and transfer
passes, all of the commands in the pass act as though they run in parallel. This means that writing to the same element of a buffer twice, or writing to it and reading from it again is not guaranteed to work properly on all GPUs. LÖVR is not currently able to check for this. If compute or transfers need to be sequenced, multiple passes should be used. It is, however, completely fine to read and write to non-overlapping regions of the same buffer or texture.
See also
lovr.graphics.submit
lovr.graphics.getWindowPass
lovr.headset.getPass
lovr.graphics