Texture2D.LoadRawTextureData
Declaration
public void LoadRawTextureData(byte[] data);public void LoadRawTextureData(NativeArray<T> data);public void LoadRawTextureData(IntPtr data, int size);Параметры
| Параметр | Описание |
|---|---|
| данные | Массив данных для использования. |
| размер | Размер данных в байтах. |
Описание
Устанавливает необработанные данные всей текстуры в память CPU.
Этот метод устанавливает данные пикселей для текстуры в памяти CPU. Texture.isReadable должны быть true, и вы должны вызвать Apply после LoadRawTextureData, чтобы загрузить измененные пиксели в GPU.
. Вы также можете использовать следующие команды для записи текстуры:
- Texture2D.SetPixelData, которые можно использовать для установки уровня mipmap вместо всей текстуры.
- GetRawTextureData, который возвращает
NativeArray, в который можно записывать, и может быть быстрее, потому что он избегает копирования памяти.
Размер массива data должен заполнять всю текстуру в соответствии с его шириной, высотой и mipmapCount, а расположение данных должно соответствовать формату текстуры. В противном случае LoadRawTextureData не сработает.
Например, если текстура имеет размер 16 × 8 пикселей и формат RGBA32 без mipmap, массив должен иметь размер 512 байт (16 × 8 × 4 байта). Вы можете использовать экспериментальный GraphicsFormatUtility.ComputeMipmapSize API для расчета размера уровня mipmap.
Массив должен начинаться с уровня mipmap 0.
Дополнительные ресурсы: SetPixels, SetPixels32, SetPixelData, Apply, GetRawTextureData, ImageConversion.LoadImage.
using UnityEngine;
public class ExampleScript : MonoBehaviour { public void Start() { // Create a 16 x 16 texture with PVRTC RGBA4 format and fill it with raw PVRTC bytes. Texture2D tex = new Texture2D(16, 16, TextureFormat.PVRTC_RGBA4, false);
// Raw PVRTC4 data for a 16 x 16 texture. // This format is four bits per pixel, so the data should be 128 (16 x 16 / 2) bytes in size. // The texture 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 the texture to this GameObject's material. GetComponent<Renderer>().material.mainTexture = tex; } }