Unity - используйте GetRawTextureData для изменения базовых байтов RGB без копирования - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь использовать OpenCV с Unity для обработки изображений, и я пытаюсь сделать передачу данных между OpenCV и кодом Unity максимально эффективной.

В настоящее время я могу создать новый byte[] в C #, затем загрузить изображение в эти байты в OpenCV, а затем использовать texture.LoadRawTextureData(array) и texture.Apply(), чтобы отобразить эту текстуру в Unity.

Однако в документации Unity рекомендуется использовать texture.GetRawTextureData() для получения ссылки на NativeArray (версия функции, которая возвращает byte[], создает копию необработанных данных), а затем записывать данные непосредственно в этот буфер (+ call Apply()).

К сожалению, документация по NativeArrays довольно скудна - как именно NativeArrays выглядит в памяти?У них есть функция ToArray(), но это снова делает копию данных.Мне нужен массив byte [], который может быть RGB24 или RGBA32 (RGBA кажется предпочтительным, поскольку, несмотря на то, что он неэффективен в отношении памяти, если текстура непрозрачна, современные графические процессоры, по-видимому, не поддерживают RGB24).

Есть ли способ передать указатель на начало буфера в текстуре без копирования и вызова LoadRawTextureData()?Или данные в текстуре находятся в совершенно другом формате?

...