---
title: "MeshGradientRenderer"
description: "A renderer responsible for tessellating and drawing a 2D mesh gradient."
type: "interface"
lastmod: "2026-05-08T01:17:03.094501Z"
---
## API Reference

> Source set: Common

```kotlin
interface MeshGradientRenderer
```

A renderer responsible for tessellating and drawing a 2D mesh gradient.

A mesh gradient is defined by a grid of vertices, where each vertex has a position, color, and
four optional Bezier control points (tangents) that define the curvature of the edges connecting
neighboring vertices. Colors can be interpolated using either bilinear or bicubic interpolation.

The renderer can be stateful (e.g. on Android) and maintain internal buffers (such as index and
vertex buffers) to optimize rendering performance and avoid per-frame allocations.

## Functions

### draw

```kotlin
fun DrawScope.draw(
        rows: Int,
        columns: Int,
        positions: FloatArray,
        colors: IntArray,
        leftBezierOffsets: FloatArray? = null,
        topBezierOffsets: FloatArray? = null,
        rightBezierOffsets: FloatArray? = null,
        bottomBezierOffsets: FloatArray? = null,
        hasBicubicColor: Boolean = false,
    )
```

Renders the mesh gradient onto the given [DrawScope](/jetpack-compose/androidx.compose.ui/ui-graphics/interfaces/DrawScope).

Note: If any Bezier offset is Unspecified, the renderer may modify the provided bezier offset
arrays to store the inferred values instead of Offset.Unspecified, avoiding redundant
calculations in subsequent calls.

#### Parameters

| | |
| --- | --- |
| rows | The number of rows in the mesh grid. Must be greater than 0. |
| columns | The number of columns in the mesh grid. Must be greater than 0. |
| positions | A flattened `FloatArray` containing the (x, y) coordinates for each vertex in the mesh. The array must contain at least `(rows + 1) * (columns + 1) * 2` elements. The coordinates should be normalized (0.0 to 1.0) relative to the [DrawScope.size](/jetpack-compose/androidx.compose.ui/ui-graphics/interfaces/DrawScope). |
| colors | A flattened `IntArray` containing the ARGB colors in sRGB color space for each vertex. The array must contain at least `(rows + 1) * (columns + 1)` elements. |
| leftBezierOffsets | Optional flattened `FloatArray` of (x, y) offsets for the left Bezier control points relative to the vertex position. If null, or if values are Offset.Unspecified, the renderer will infer smooth control points based on neighbors. |
| topBezierOffsets | Optional `FloatArray` for top Bezier control point offsets. |
| rightBezierOffsets | Optional `FloatArray` for right Bezier control point offsets. |
| bottomBezierOffsets | Optional `FloatArray` for bottom Bezier control point offsets. |
| hasBicubicColor | Whether to use bicubic interpolation for colors (Catmull-Rom) or bilinear interpolation. Bicubic provides smoother transitions but is more computationally expensive. |
