# GetBoneWeightBuffer(SkinWeights)

> Retrieves a GraphicsBuffer that provides direct read and write access to GPU bone weight data.

## Definition

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

```csharp
public GraphicsBuffer GetBoneWeightBuffer(SkinWeights layout)
```

### Parameters

**** (\[SkinWeights]\(/engine/6000.7/script-reference/unityengine/skinweights)): Which buffer to access, based on maximum bones per vertex.

### Returns

| Type                                                                            | Description                                                                                                |
| ------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| [GraphicsBuffer](/engine/6000.7/script-reference/unityengine/graphicsbuffer.md) | The bone weight data as a [GraphicsBuffer](/engine/6000.7/script-reference/unityengine/graphicsbuffer.md). |

### Remarks

The buffer that this function returns is called the bone weight buffer. It contains indices and weights to use for skinning.

To know which buffer the mesh is using, call [Mesh.skinWeightBufferLayout](/engine/6000.7/script-reference/unityengine/mesh/skinweightbufferlayout.md).

It is possible to access the buffer with a lower SkinWeigts setting, for instance a mesh with [SkinWeights.Unlimited](/engine/6000.7/script-reference/unityengine/skinweights/unlimited.md) can be accessed with [SkinWeights.FourBones](/engine/6000.7/script-reference/unityengine/skinweights/fourbones.md) and [SkinWeights.TwoBones](/engine/6000.7/script-reference/unityengine/skinweights/twobones.md). However, a mesh with [SkinWeights.FourBones](/engine/6000.7/script-reference/unityengine/skinweights/fourbones.md) can not be accessed using [SkinWeights.Unlimited](/engine/6000.7/script-reference/unityengine/skinweights/unlimited.md).

[Mesh.isReadable](/engine/6000.7/script-reference/unityengine/mesh/isreadable.md) does not need to be `true` to access this data.

After using this buffer, you should dispose of it.

```csharp
using UnityEngine;

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

    void Start()
    {
        // Fetch GraphicsBuffer with Bone Weight data
        var boneWeightBuffer = mesh.GetBoneWeightBuffer(mesh.skinWeightBufferLayout);

        // Set Bone Weight data to a compute shader
        computeShader.SetBuffer(0, "BoneWeightBuffer", boneWeightBuffer);

        // Dispatch compute shader and access Bone Weight data on the GPU
        computeShader.Dispatch(0, 64, 1, 1);

        // Dispose of GraphicsBuffer to avoid leaking memory
        boneWeightBuffer .Dispose();
    }

}
```

Additional Resources: skinWeightsBufferLayout, [Mesh.GetBlendShapeBuffer](/engine/6000.7/script-reference/unityengine/mesh/getblendshapebuffer.md)
