Объявление
public void LoadRawTextureData(byte[] data);public void LoadRawTextureData(NativeArray
public void LoadRawTextureData(IntPtr data, int size);
Параметры
data | Массив необработанных данных для инициализации пикселей текстуры. |
size | Размер данных в байтах. |
Описание
Заполняет пиксели текстуры необработанными предварительно отформатированными данными.
Эта функция заполняет память пикселей текстуры необработанными данными. Это в основном полезно для загрузки данных формата сжатой текстуры в текстуру.
Переданные данные должны иметь необходимый размер для заполнения всей текстуры в соответствии с ее шириной, высотой, форматом данных и mipmapCount ; в противном случае выдается исключение UnityException. MIP-карты располагаются в памяти, начиная с самой большой, сразу за ней следуют данные меньшего уровня. Например, текстура 16 x 8 в формате RGBA32 без MIP-карт может быть заполнена массивом размером 512 байт (16 x 8 x 4).
Для генерации текстуры во время выполнения также можно напрямую записывать данные текстуры с помощью GetRawTextureData, который возвращает Unity.Collections.NativeArray
. Это может быть быстрее, так как позволяет избежать копирования в память, которое сделал бы LoadRawTextureData.
Вызовите Применить после установки данных изображения, чтобы фактически загрузить их в графический процессор.
Смотрите так же: SetPixels, SetPixels32, SetPixelData, Apply, GetRawTextureData, ImageConversion.LoadImage.
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
public void Start()
{
// Создаем текстуру 16x16 в формате PVRTC RGBA4
// и заполнить его необработанными байтами PVRTC.
Texture2D tex = new Texture2D(16, 16, TextureFormat.PVRTC_RGBA4, false);
// Raw PVRTC4 data for a 16x16 texture. This format is four bits
// per pixel, so data should be 16*16/2=128 bytes in size.
// Texture that is encoded here is mostly green with some angular
// blue and red lines.
byte[] pvrtcBytes = new byte[]
{
0x30, 0x32, 0x32, 0x32, 0xe7, 0x30, 0xaa, 0x7f, 0x32, 0x32, 0x32, 0x32, 0xf9, 0x40, 0xbc, 0x7f,
0x03, 0x03, 0x03, 0x03, 0xf6, 0x30, 0x02, 0x05, 0x03, 0x03, 0x03, 0x03, 0xf4, 0x30, 0x03, 0x06,
0x32, 0x32, 0x32, 0x32, 0xf7, 0x40, 0xaa, 0x7f, 0x32, 0xf2, 0x02, 0xa8, 0xe7, 0x30, 0xff, 0xff,
0x03, 0x03, 0x03, 0xff, 0xe6, 0x40, 0x00, 0x0f, 0x00, 0xff, 0x00, 0xaa, 0xe9, 0x40, 0x9f, 0xff,
0x5b, 0x03, 0x03, 0x03, 0xca, 0x6a, 0x0f, 0x30, 0x03, 0x03, 0x03, 0xff, 0xca, 0x68, 0x0f, 0x30,
0xaa, 0x94, 0x90, 0x40, 0xba, 0x5b, 0xaf, 0x68, 0x40, 0x00, 0x00, 0xff, 0xca, 0x58, 0x0f, 0x20,
0x00, 0x00, 0x00, 0xff, 0xe6, 0x40, 0x01, 0x2c, 0x00, 0xff, 0x00, 0xaa, 0xdb, 0x41, 0xff, 0xff,
0x00, 0x00, 0x00, 0xff, 0xe8, 0x40, 0x01, 0x1c, 0x00, 0xff, 0x00, 0xaa, 0xbb, 0x40, 0xff, 0xff,
};
// Load data into the texture and upload it to the GPU.
tex.LoadRawTextureData(pvrtcBytes);
tex.Apply();
// Assign texture to renderer's material.
GetComponent<Renderer>().material.mainTexture = tex;
}
}