# GetBlendShapeBufferRange(int)

> Get the location of blend shape vertex data for a given blend shape.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine](/engine/6000.0/script-reference/unityengine.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public BlendShapeBufferRange GetBlendShapeBufferRange(int blendShapeIndex)
```

### Parameters

**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which blend shape to locate the data for.

### Returns

| Type                                                                                          | Description                                                                            |
| --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| [BlendShapeBufferRange](/engine/6000.0/script-reference/unityengine/blendshapebufferrange.md) | A struct that describes the start and end index of the data for the given blend shape. |

### Remarks

When you call [Mesh.GetBlendShapeBuffer](/engine/6000.0/script-reference/unityengine/mesh/getblendshapebuffer.md) with [BlendShapeBufferLayout.PerShape](/engine/6000.0/script-reference/unityengine/rendering/blendshapebufferlayout/pershape.md), Unity returns a [GraphicsBuffer](/engine/6000.0/script-reference/unityengine/graphicsbuffer.md) that contains blend shape vertex data, ordered by blend shape.

When you call this function, Unity returns a [BlendShapeBufferRange](/engine/6000.0/script-reference/unityengine/blendshapebufferrange.md) for the given blend shape. Use it to locate the data for that blend shape in the `GraphicsBuffer`.

```csharp
using UnityEngine;
using UnityEngine.Rendering;

public class Example : MonoBehaviour
{
    public Mesh mesh;
    public ComputeShader computeShader;

    void Start()
    {
        // Fetch GraphicsBuffer with Blend Shape data, ordered per shape, from the mesh
        var perShapeBuffer = mesh.GetBlendShapeBuffer(BlendShapeBufferLayout.PerShape);

        // Iterate over all Blend Shapes in a mesh
        for(int blendShapeIndex = 0; blendShapeIndex  < mesh.blendShapeCount; ++blendShapeIndex)
        {
            // Fetch which indices in the buffer that are part of this Blend Shape
            var blendShapeRange = mesh.GetBlendShapeBufferRange(blendShapeIndex);

            // Set the start and end indices of the Blend Shape in the compute shader
            computeShader.SetInt("_StartIndex", (int)blendShapeRange.startIndex);
            computeShader.SetInt("_EndIndex", (int)blendShapeRange.endIndex);

            // Dispatch compute shader and access data between start and end index for this Blend Shape
            computeShader.Dispatch(0, 64, 1, 1);
        }

        // Dispose of GraphicsBuffer to avoid leak memory
        perShapeBuffer.Dispose();
    }
}
```

Additional Resources: [BlendShapeBufferRange](/engine/6000.0/script-reference/unityengine/blendshapebufferrange.md), [Mesh.GetBlendShapeBuffer](/engine/6000.0/script-reference/unityengine/mesh/getblendshapebuffer.md), [BlendShapeBufferLayout.PerShape](/engine/6000.0/script-reference/unityengine/rendering/blendshapebufferlayout/pershape.md)
