# SetPixelData

> Sets the raw data of an entire mipmap level directly in CPU memory.

## Definition

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

## SetPixelData\<T>(\`\<>\[], int, int, int)

Sets the raw data of an entire mipmap level directly in CPU memory.

```csharp
public void SetPixelData<T>(T[] data, int mipLevel, int element, int sourceDataStartIndex = 0)
```

### Parameters

**** (\[\<T>\[]]\(./)): The array of data to use.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The mipmap level to write to. The range is `0` through the texture's [Texture.mipmapCount](/engine/6000.0/script-reference/unityengine/texture/mipmapcount.md). The default value is `0`.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The array slice to copy pixels to.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The index in the source array to start copying from. The default value is `0`.

### Remarks

This method sets pixel data for the texture in CPU memory. [Texture.isReadable](/engine/6000.0/script-reference/unityengine/texture/isreadable.md) must be `true`, and you must call [Texture2DArray.Apply](/engine/6000.0/script-reference/unityengine/texture2darray/apply.md) after `SetPixelData` to upload the changed pixels to the GPU.

`SetPixelData` is useful if you want to load compressed or other non-color texture format data into a texture.

The size of the `data` array must be the width × height of the mipmap level, and the data layout must match the texture format, otherwise `SetPixelData` fails. You can use `byte` for `T` if you don't want to define a custom struct to match the texture format.

Unity throws an exception when `SetPixelData` fails.

Additional Resources: [Texture2DArray.SetPixels](/engine/6000.0/script-reference/unityengine/texture2darray/setpixels.md), [Texture2DArray.GetPixelData](/engine/6000.0/script-reference/unityengine/texture2darray/getpixeldata.md), [Texture2DArray.Apply](/engine/6000.0/script-reference/unityengine/texture2darray/apply.md).

### Examples

```csharp
using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    public Texture2DArray texture;
    public void Start()
    {
        texture = new Texture2DArray(2, 2, 3, TextureFormat.RGB24, true);
        var data = new byte[]
        {
            // mip 0: 2x2 size
            255, 0, 0, // red
            0, 255, 0, // green
            0, 0, 255, // blue
            255, 235, 4, // yellow
            // mip 1: 1x1 size
            0, 255, 255 // cyan
        };
        texture.SetPixelData(data, 0, 0, 0); // mip 0
        texture.SetPixelData(data, 1, 0, 12); // mip 1
        texture.filterMode = FilterMode.Point;
        texture.Apply(updateMipmaps: false);
    }
}
```

## SetPixelData\<T>(NativeArray\<T>, int, int, int)

Sets the raw data of an entire mipmap level directly in CPU memory.

```csharp
public void SetPixelData<T>(NativeArray<T> data, int mipLevel, int element, int sourceDataStartIndex = 0) where T : struct
```

### Parameters

**** (\[NativeArray\<T>]\(/engine/6000.0/script-reference/unity/collections/nativearray1)): The array of data to use.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The mipmap level to write to. The range is `0` through the texture's [Texture.mipmapCount](/engine/6000.0/script-reference/unityengine/texture/mipmapcount.md). The default value is `0`.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The array slice to copy pixels to.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The index in the source array to start copying from. The default value is `0`.

### Remarks

This method sets pixel data for the texture in CPU memory. [Texture.isReadable](/engine/6000.0/script-reference/unityengine/texture/isreadable.md) must be `true`, and you must call [Texture2DArray.Apply](/engine/6000.0/script-reference/unityengine/texture2darray/apply.md) after `SetPixelData` to upload the changed pixels to the GPU.

`SetPixelData` is useful if you want to load compressed or other non-color texture format data into a texture.

The size of the `data` array must be the width × height of the mipmap level, and the data layout must match the texture format, otherwise `SetPixelData` fails. You can use `byte` for `T` if you don't want to define a custom struct to match the texture format.

Unity throws an exception when `SetPixelData` fails.

Additional Resources: [Texture2DArray.SetPixels](/engine/6000.0/script-reference/unityengine/texture2darray/setpixels.md), [Texture2DArray.GetPixelData](/engine/6000.0/script-reference/unityengine/texture2darray/getpixeldata.md), [Texture2DArray.Apply](/engine/6000.0/script-reference/unityengine/texture2darray/apply.md).

### Examples

```csharp
using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    public Texture2DArray texture;
    public void Start()
    {
        texture = new Texture2DArray(2, 2, 3, TextureFormat.RGB24, true);
        var data = new byte[]
        {
            // mip 0: 2x2 size
            255, 0, 0, // red
            0, 255, 0, // green
            0, 0, 255, // blue
            255, 235, 4, // yellow
            // mip 1: 1x1 size
            0, 255, 255 // cyan
        };
        texture.SetPixelData(data, 0, 0, 0); // mip 0
        texture.SetPixelData(data, 1, 0, 12); // mip 1
        texture.filterMode = FilterMode.Point;
        texture.Apply(updateMipmaps: false);
    }
}
```
