# GraphicsBuffer

> GPU graphics data buffer, for working with geometry or compute shader data.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine](/engine/6000.7/script-reference/unityengine.md)
* **Assembly:** UnityEngine.CoreModule
* **Implements:** [IDisposable](https://learn.microsoft.com/dotnet/api/system.idisposable)

```csharp
public sealed class GraphicsBuffer : IDisposable
```

## Remarks

[ComputeShader](/engine/6000.7/script-reference/unityengine/computeshader.md) programs often need to read or write arbitrary data from or to memory buffers, and some rendering algorithms need a lower level access or control over geometry data than what is provided by the [Mesh](/engine/6000.7/script-reference/unityengine/mesh.md) class. You can use `GraphicsBuffer` for these cases. You create the buffers from C# scripts, and then fill them with data using either C# scripts or compute shader programs.

A graphics buffer is similar to an array in C#, in that it has a number of elements ([GraphicsBuffer.count](/engine/6000.7/script-reference/unityengine/graphicsbuffer/count.md)) of the same size ([GraphicsBuffer.stride](/engine/6000.7/script-reference/unityengine/graphicsbuffer/stride.md)). You must supply the intended buffer usage ([GraphicsBuffer.target](/engine/6000.7/script-reference/unityengine/graphicsbuffer/target-1.md)) when you create a GraphicsBuffer; for example, you must pass [GraphicsBuffer.Target.Index](/engine/6000.7/script-reference/unityengine/graphicsbuffer/target/index.md) for the buffer to be usable as a geometry index buffer.

When you have finished working with the buffer, you must manually release the GPU memory. You can do this using C# dispose pattern, or by calling [GraphicsBuffer.Release](/engine/6000.7/script-reference/unityengine/graphicsbuffer/release.md).

Additional Resources: [Graphics.RenderPrimitivesIndexed](/engine/6000.7/script-reference/unityengine/graphics/renderprimitivesindexed.md), [Graphics.RenderPrimitivesIndexedIndirect](/engine/6000.7/script-reference/unityengine/graphics/renderprimitivesindexedindirect.md), [Graphics.CopyBuffer](/engine/6000.7/script-reference/unityengine/graphics/copybuffer.md), [ComputeShader](/engine/6000.7/script-reference/unityengine/computeshader.md), [Shader.SetGlobalBuffer](/engine/6000.7/script-reference/unityengine/shader/setglobalbuffer.md), [Material.SetBuffer](/engine/6000.7/script-reference/unityengine/material/setbuffer.md).

## Constructors

| Constructor                                                                                                                                                                                                                         | Description               |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| [GraphicsBuffer(UnityEngine.GraphicsBuffer.Target,System.Int32,System.Int32)](/engine/6000.7/script-reference/unityengine/graphicsbuffer/ctor.md#graphicsbuffer\(target-int-int\))                                                  | Create a Graphics Buffer. |
| [GraphicsBuffer(UnityEngine.GraphicsBuffer.Target,UnityEngine.GraphicsBuffer.UsageFlags,System.Int32,System.Int32)](/engine/6000.7/script-reference/unityengine/graphicsbuffer/ctor.md#graphicsbuffer\(target-usageflags-int-int\)) | Create a Graphics Buffer. |

## Properties

| Property                                                                                   | Description                                                                                         |
| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- |
| [bufferHandle](/engine/6000.7/script-reference/unityengine/graphicsbuffer/bufferhandle.md) | The internal handle of this GraphicsBuffer. Only valid until the buffer is disposed of. (Read Only) |
| [count](/engine/6000.7/script-reference/unityengine/graphicsbuffer/count.md)               | Number of elements in the buffer (Read Only).                                                       |
| [name](/engine/6000.7/script-reference/unityengine/graphicsbuffer/name.md)                 | The debug label for the graphics buffer (setter only).                                              |
| [stride](/engine/6000.7/script-reference/unityengine/graphicsbuffer/stride.md)             | Size of one element in the buffer. For index buffers, this must be either 2 or 4 bytes (Read Only). |
| [target](/engine/6000.7/script-reference/unityengine/graphicsbuffer/target-1.md)           | Target, which specifies the intended target(s) of this GraphicsBuffer (Read Only).                  |
| [usageFlags](/engine/6000.7/script-reference/unityengine/graphicsbuffer/usageflags-1.md)   | The flags that specify how this GraphicsBuffer can be used or updated (Read Only).                  |

## Methods

| Method                                                                                                         | Description                                                                                                                                                                            |
| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [GetData](/engine/6000.7/script-reference/unityengine/graphicsbuffer/getdata.md)                               | Read data values from the buffer into an array. The array can only use [blittable](https://docs.microsoft.com/en-us/dotnet/framework/interop/blittable-and-non-blittable-types) types. |
| [GetNativeBufferPtr](/engine/6000.7/script-reference/unityengine/graphicsbuffer/getnativebufferptr.md)         | Retrieve a native (underlying graphics API) pointer to the buffer.                                                                                                                     |
| [IsValid](/engine/6000.7/script-reference/unityengine/graphicsbuffer/isvalid.md)                               | Returns true if this graphics buffer is valid, or false otherwise.                                                                                                                     |
| [LockBufferForWrite](/engine/6000.7/script-reference/unityengine/graphicsbuffer/lockbufferforwrite.md)         | Begins a write operation to the buffer                                                                                                                                                 |
| [Release](/engine/6000.7/script-reference/unityengine/graphicsbuffer/release.md)                               | Release a Graphics Buffer.                                                                                                                                                             |
| [SetCounterValue](/engine/6000.7/script-reference/unityengine/graphicsbuffer/setcountervalue.md)               | Sets counter value of append/consume buffer.                                                                                                                                           |
| [SetData](/engine/6000.7/script-reference/unityengine/graphicsbuffer/setdata.md)                               | Set the buffer with values from an array.                                                                                                                                              |
| [UnlockBufferAfterWrite](/engine/6000.7/script-reference/unityengine/graphicsbuffer/unlockbufferafterwrite.md) | Ends a write operation to the buffer                                                                                                                                                   |

## Static Methods

| Method                                                                               | Description                                                     |
| ------------------------------------------------------------------------------------ | --------------------------------------------------------------- |
| [CopyCount](/engine/6000.7/script-reference/unityengine/graphicsbuffer/copycount.md) | Copy the counter value of a GraphicsBuffer into another buffer. |

## Structs

| Struct                                                                                                                          | Description                                                    |
| ------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| [GraphicsBuffer.IndirectDrawArgs](/engine/6000.7/script-reference/unityengine/graphicsbuffer/indirectdrawargs.md)               | Defines the data layout for non-indexed indirect render calls. |
| [GraphicsBuffer.IndirectDrawIndexedArgs](/engine/6000.7/script-reference/unityengine/graphicsbuffer/indirectdrawindexedargs.md) | Defines the data layout for indexed indirect render calls.     |

## Enums

| Enum                                                                                                  | Description                              |
| ----------------------------------------------------------------------------------------------------- | ---------------------------------------- |
| [GraphicsBuffer.Target](/engine/6000.7/script-reference/unityengine/graphicsbuffer/target.md)         | The intended targets for GraphicsBuffer. |
| [GraphicsBuffer.UsageFlags](/engine/6000.7/script-reference/unityengine/graphicsbuffer/usageflags.md) | The intended usage of a GraphicsBuffer.  |
