Texture2D.Apply
Declaration
public void Apply(bool updateMipmaps = true, bool makeNoLongerReadable = false);Параметры
| Параметр | Описание |
|---|---|
| updateMipmaps | Когда значением является true, Unity пересчитывает уровни mipmap, используя уровень mipmap 0 в качестве источника. Значение по умолчанию — true. |
| makeNoLongerReadable | Когда значением является true, Unity удаляет текстуру в памяти CPU после ее загрузки в GPU, и устанавливает isReadable на false. Значение по умолчанию — false. |
Описание
Копирует изменения, сделанные в текстуре CPU в текстуру GPU.
Для большинства типов текстур, Unity может хранить копию текстуры как в памяти CPU, так и в памяти GPU.
Копия CPU необязательна. Если существует копия CPU, вы можете читать и записывать в копию CPU более гибко, чем в копию GPU, например, используя GetPixels. Но для рендеринга обновленной текстуры, вы должны использовать Apply для копирования ее из CPU в GPU.
Если вы установите makeNoLongerReadable на true, Unity удалит копию CPU текстуры после ее загрузки в GPU. Это означает, что Unity не может перезагрузить текстуру. Даже если Apply вызван на текстурном ассете с данными, хранящимися на диске, Unity больше не будет пытаться перезагрузить текстуру с диска, если он отбросит копию CPU, поскольку читаемые данные текстуры могут быть изменены. Это актуально при использовании ограничений mipmap в вашем проекте для уменьшения количества загружаемых mips (см., например, QualitySettings.globalTextureMipmapLimit). Как текстуры времени выполнения, так и читаемые объекты текстуры перестанут следовать настройкам качества после удаления копии CPU в Apply. Загруженное разрешение текстур остается таким же, каким оно было загружено в GPU в момент, когда Unity удаляет копию CPU. Если это нежелательно, убедитесь, что текстура загружена в полном разрешении, либо во время импорта/конструирования, либо с помощью Texture2D.ignoreMipmapLimit во время выполнения.
Обычно updateMipmaps настраивается на false только в том случае, если вы уже обновили уровни mipmap, например, используя SetPixels.Apply является дорогостоящей операцией, так как она копирует все пиксели текстуры, даже если вы изменили только некоторые пиксели, так что измените как можно больше пикселей, прежде чем вызвать ее.
// Create a new texture and assign it to the renderer's material using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { void Start() { Texture2D texture = new Texture2D(128, 128); GetComponent<Renderer>().material.mainTexture = texture;
for (int y = 0; y < texture.height; y++) { for (int x = 0; x < texture.width; x++) { Color color = ((x & y) != 0 ? Color.white : Color.gray); texture.SetPixel(x, y, color); } } texture.Apply(); } }
Дополнительные ресурсы: SetPixel, SetPixels функции, Graphics.CopyTexture.