Объявление
public static void CopyTexture(Texture src, Texture dst);public static void CopyTexture(Texture src, int srcElement, int srcMip, Texture dst, int dstElement, int dstMip);
public static void CopyTexture(Texture src, int srcElement, int srcMip, int srcX, int srcY, int srcWidth, int srcHeight, Texture dst, int dstElement, int dstMip, int dstX, int dstY);
Параметры
src | Исходная текстура. |
dst | Текстура назначения. |
srcElement | Исходный элемент текстуры (грань кубической карты, слой массива текстур или срез глубины 3D-текстуры). |
srcMip | Уровень MIP-карты исходной текстуры. |
dstElement | Целевой элемент текстуры (грань кубической карты, слой массива текстур или срез глубины 3D-текстуры). |
dstMip | Уровень MIP-карты целевой текстуры. |
srcX | Координата X области исходной текстуры для копирования (левая сторона равна нулю). |
srcY | Координата Y области исходной текстуры для копирования (нижняя часть равна нулю). |
srcWidth | Ширина области исходной текстуры для копирования. |
srcHeight | Высота области исходной текстуры для копирования. |
dstX | Координата X места для копирования области в целевой текстуре (левая сторона равна нулю). |
dstY | Координата Y места для копирования области в целевой текстуре (нижняя часть равна нулю). |
Описание
Копировать содержимое текстуры.
Эта функция позволяет эффективно копировать пиксельные данные из одной текстуры в другую. Это также позволяет копировать из элемента (например, грани кубической карты) или определенного уровня MIP, а также из подобласти текстуры.
Когда вы копируете элемент, он не масштабируется. В результате размеры источника и назначения должны совпадать. Форматы текстур должны быть совместимы, например, TextureFormat.ARGB32. и RenderTextureFormat.ARGB32. Количество выборок MSAA для текстур рендеринга также должно быть одинаковым. Как правило, вы всегда можете копировать абсолютно одинаковые форматы, но совместимость форматов зависит от графического API. На некоторых платформах (например, D3D11) вы также можете копировать между форматами с одинаковой разрядностью.
Вы можете загружать текстуры с различным разрешением, используя QualitySettings.masterTextureLimit. Обратите внимание, что это влияет на CopyTextures, так как вы не можете копировать полный MIP между текстурами с разными значениями лимита основной текстуры. Если вам нужно скопировать между текстурами с другим лимитом основной текстуры, используйте перегрузку на основе региона. Перегрузка на основе области настраивает исходный прямоугольник на основе предела основной текстуры исходной текстуры. Он также регулирует смещение целевого объекта на основе предела основной текстуры целевого объекта. Например, копирование области 128 x 128 из позиции 16,16 в позицию 32,32 приводит к следующему поведению в следующих примерах:
- Если предел основной текстуры установлен на 0: Unity выполняет все копии, как ожидалось.
- Если ограничение основной текстуры установлено на 2 и обе текстуры подпадают под ограничение основной текстуры: Unity настраивает исходный прямоугольник на 32x32 и настраивает смещение на 4,4. Unity изменяет смещение назначения на 8x8. Unity выполняет все копии, как и ожидалось, не обращая внимания на настройку предела основной текстуры.
- Если для ограничения основной текстуры установлено значение 2, источником является обычная текстура, а местом назначения является текстура-массив (текстуры-массивы никогда не подпадают под ограничение основной текстуры): Unity настраивает исходный прямоугольник на 32x32 и настраивает смещение до 4,4. Unity не меняет целевое смещение, которое остается равным 32 x 32.
Аргументы уровня Mipmap всегда применяются к текстуре, загруженной в соответствии с текущим ограничением основной текстуры. Например, текстура 256x256 с лимитом основной текстуры, установленным на 0 mip 1, относится к 128x128 mip. Однако, если предел мастер-текстуры для этой текстуры установлен на 2, mip 1 относится к mip 32x32. Это означает, что во многих случаях при использовании CopyTexture вам не нужно учитывать лимит основной текстуры в своих вызовах. В менее распространенных вызовах (например, при копировании из Texture2D в TextureArray) вам нужно настроить его. Чтобы скопировать текстуры в массив кубической карты, вычислите элемент назначения как 6 * cubemapIndex + faceIndex. В результате шесть граней из кубической карты с индексом 0 являются элементами 0,1,2... 5. Шесть граней из кубической карты с индексом массива 1 имеют 6,7.... 11 и так далее. р>
Сжатые форматы текстур накладывают некоторые ограничения на CopyTexture с вариантом региона. Например, форматы PVRTC не поддерживаются, так как они не основаны на блоках (для этих форматов вы можете копировать только всю текстуру или весь мип-уровень). Для блочных форматов (например, DXT, ETC) размер области и координаты должны быть кратны размеру блока сжатия. (4 пикселя для DXT).
Если и исходная, и целевая текстуры помечены как "читаемые" (т. е. копия данных существует в системной памяти для чтения/записи на ЦП), эти функции также копируют ее.
На некоторых платформах могут отсутствовать функции копирования всех видов текстур (например, копирование из текстуры рендеринга в обычную текстуру). См. CopyTextureSupport и используйте SystemInfo.copyTextureSupport для проверки.
Вызов Texture2D.Apply, Texture2DArray.Apply или Texture3D.Apply после CopyTexture
дает неопределенные результаты, поскольку CopyTexture
работает исключительно с данными на стороне графического процессора, тогда как Применить
передает данные с процессора на сторону графического процессора.
Смотрите так же: CopyTextureSupport.