# SetPixelData

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

## Definition

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

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

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

```csharp
public void SetPixelData<T>(T[] data, int mipLevel, CubemapFace face, 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.5/script-reference/unityengine/texture/mipmapcount.md). The default value is `0`.**** (\[CubemapFace]\(/engine/6000.5/script-reference/unityengine/cubemapface)): The [CubemapFace](/engine/6000.5/script-reference/unityengine/cubemapface.md) to write 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.5/script-reference/unityengine/texture/isreadable.md) must be `true`, and you must call [Cubemap.Apply](/engine/6000.5/script-reference/unityengine/cubemap/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: [Cubemap.SetPixels](/engine/6000.5/script-reference/unityengine/cubemap/setpixels.md), [Cubemap.GetPixelData](/engine/6000.5/script-reference/unityengine/cubemap/getpixeldata.md), [Cubemap.Apply](/engine/6000.5/script-reference/unityengine/cubemap/apply.md).

### Examples

```csharp
using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    public void Start()
    {
        Cubemap cubemap = new Cubemap(2, TextureFormat.RGB24, true);

        var byteArray = new byte[] {255, 0, 0,
                                    0, 255, 0,
                                    0, 0, 255,
                                    255, 235, 4,
                                    255, 0, 255,
                                    255, 255, 255,
                                    0, 0, 0,
                                    0, 255, 255,
                                    255, 0, 255};

        cubemap.SetPixelData(byteArray, 0, CubemapFace.PositiveX);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.PositiveX,  12);

        cubemap.SetPixelData(byteArray, 0, CubemapFace.NegativeX, 15);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.NegativeX, 12);

        cubemap.SetPixelData(byteArray, 0, CubemapFace.PositiveY);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.PositiveY,  12);

        cubemap.SetPixelData(byteArray, 0, CubemapFace.NegativeY, 15);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.NegativeY, 12);

        cubemap.SetPixelData(byteArray, 0, CubemapFace.PositiveZ);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.PositiveZ,  12);

        cubemap.SetPixelData(byteArray, 0, CubemapFace.NegativeZ, 15);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.NegativeZ, 12);

        cubemap.Apply(updateMipmaps: false);
    }
}
```

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

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

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

### Parameters

**** (\[NativeArray\<T>]\(/engine/6000.5/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.5/script-reference/unityengine/texture/mipmapcount.md). The default value is `0`.**** (\[CubemapFace]\(/engine/6000.5/script-reference/unityengine/cubemapface)): The [CubemapFace](/engine/6000.5/script-reference/unityengine/cubemapface.md) to write 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.5/script-reference/unityengine/texture/isreadable.md) must be `true`, and you must call [Cubemap.Apply](/engine/6000.5/script-reference/unityengine/cubemap/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: [Cubemap.SetPixels](/engine/6000.5/script-reference/unityengine/cubemap/setpixels.md), [Cubemap.GetPixelData](/engine/6000.5/script-reference/unityengine/cubemap/getpixeldata.md), [Cubemap.Apply](/engine/6000.5/script-reference/unityengine/cubemap/apply.md).

### Examples

```csharp
using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    public void Start()
    {
        Cubemap cubemap = new Cubemap(2, TextureFormat.RGB24, true);

        var byteArray = new byte[] {255, 0, 0,
                                    0, 255, 0,
                                    0, 0, 255,
                                    255, 235, 4,
                                    255, 0, 255,
                                    255, 255, 255,
                                    0, 0, 0,
                                    0, 255, 255,
                                    255, 0, 255};

        cubemap.SetPixelData(byteArray, 0, CubemapFace.PositiveX);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.PositiveX,  12);

        cubemap.SetPixelData(byteArray, 0, CubemapFace.NegativeX, 15);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.NegativeX, 12);

        cubemap.SetPixelData(byteArray, 0, CubemapFace.PositiveY);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.PositiveY,  12);

        cubemap.SetPixelData(byteArray, 0, CubemapFace.NegativeY, 15);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.NegativeY, 12);

        cubemap.SetPixelData(byteArray, 0, CubemapFace.PositiveZ);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.PositiveZ,  12);

        cubemap.SetPixelData(byteArray, 0, CubemapFace.NegativeZ, 15);
        cubemap.SetPixelData(byteArray, 1, CubemapFace.NegativeZ, 12);

        cubemap.Apply(updateMipmaps: false);
    }
}
```
